【问题标题】: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 是不允许的;这是批处理文件的一个巨大限制......

标签: batch-file duplicates copy file-rename


【解决方案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"

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 1970-01-01
    • 2018-04-26
    • 2020-03-23
    • 1970-01-01
    • 2017-12-22
    • 2014-07-16
    • 2014-07-19
    • 2015-08-15
    相关资源
    最近更新 更多