批量复制重命名,重复时提示

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"

【讨论】:

以上是关于批量复制重命名,重复时提示的主要内容,如果未能解决你的问题,请参考以下文章

Python脚本之批量复制文件并同时支持重命名

DOS按规则批量重命名所有(子)目录下文件

DOS按规则批量重命名所有(子)目录下文件

如何在 Linux 中批量移动复制追加和重命名文件

如何让文件自动重命名?

按特定条件复制和重命名 - 批量