批量复制重命名,重复时提示
Posted
技术标签:
【中文标题】批量复制重命名,重复时提示【英文标题】:Batch Copy Rename, Prompt on duplicate 【发布时间】:2020-07-25 06:15:44 【问题描述】:对于批处理文件和一般编程来说都是超级新手,所以任何帮助都会得到帮助; 我正在尝试根据用户输入复制和重命名文件,然后打开新文件。我的问题是,如果有重复,我希望它重新提示用户输入不同的名称。现在我有:
SET /P "dname=Type new sheet name, then press Enter:"
COPY "O:\master.xlsx" "O:\%dname%.xlsx" /V /-Y
START /D "O:" %dname%.xlsx
这适用于复制和重命名,但如果有重复,我会收到提示“你想复制 Y/N”,但如果我说不,它不会要求其他名称。 谢谢!
编辑 1: 我现在有这个:
SET /P "dname=Type sheet name, then press Enter:"
IF EXIST "O:\%dname%.xlsx" (
:RETRY
SET /P "dname=Error! There is already a file named %dname%. Please choose a new unique name:"
IF EXIST "O:\%dname%.xlsx" (
GOTO :RETRY
ELSE GOTO :COPY
)
) ELSE GOTO :COPY
:COPY
COPY "O:\master.xlsx" "O:\%dname%.xlsx" /V /-Y
而且它似乎工作可靠。有没有更好的方法通过循环来简化/优化它?还是这样就够了?
【问题讨论】:
没有内置的方法可以做到这一点。您必须为它编写一个脚本(具有 if exist 和您选择的生成唯一文件名的方法 - 最简单的方法是增加一个计数器,就像explorer
一样)
您的新尝试(编辑)中的问题是您在带括号的代码块中使用了标签,但这不起作用;如果goto ::RETRY
运行执行没有“停留”在块中,它会将目标标签和之后的所有内容视为在块之外,其中) else goto :COPY
是不允许的;这是批处理文件的一个巨大限制......
【参考方案1】:
我会这样做:
@echo off
setlocal
set "oldname=master"
:loop
set "newname=%oldname%"
set /p "newname=New Name: "
if exist "%newname%.xlsx" (
echo %newname%.xlsx already exists. Chose another name.
goto :loop
)
COPY "%oldname%.xlsx" "%newname%.xlsx"
【讨论】:
以上是关于批量复制重命名,重复时提示的主要内容,如果未能解决你的问题,请参考以下文章