对多个文件夹中的单个文件使用 xcopy 或复制

Using xcopy or copy for a single file from multiple folders

所以在我正在构建的批处理脚本中,我从文件夹中取出一个文件,将其复制到目标文件夹,然后根据脚本循环的次数重命名它。本质上,我需要从分布在多台计算机上的一堆不同文件夹中取出一个名为相同的文件,并将它们复制到一个新文件夹中以供使用。我已经阅读了 xcopy 和 copy,因为这似乎是可以使用的东西,但我找不到任何可以让我告诉它只复制一个命名文件的东西。我已经发布了我目前为下面的脚本编写的内容,并为我没有想到的部分添加了注释行:

ECHO off
SETLOCAL enabledelayedexpansion

ECHO Note: Your combined permission list cvs can be found in the desktop folder

SET /A #=-1
:start

SET /A #+=1

:again    
ECHO Please input the file path to the permissionoutput.txt
SET /p permissionoutputpath=

SET "sourcefolder=%permissionoutputpath%"
SET "destinationfolder=C:\Users\kayla\Desktop\HOLDER-CombinedPermissionsLists"
IF not exist "%sourcefolder%\permissionoutput.txt" Echo file not found&goto again
copy "%sourcefolder%\permissionoutput.txt" "%destinationfolder%\permissionoutput%#%.txt"

ECHO Add another file to combine: y or n?
SET /p addanotherfile=
if %addanotherfile%==y goto :start

更新:代码已更正答案,可作为参考使用

SET /A #=-1
:start

SET /A #+=1

:again    
ECHO Please input the file path to the permissionoutput.txt
SET /p permissionoutputpath=

SET "sourcefolder=%permissionoutputpath%"
SET "destinationfolder=C:\Users\kayla\Desktop\HOLDER-CombinedPermissionsLists"
IF not exist "%sourcefolder%\permissionoutput.txt" Echo file not found&goto again
copy "%sourcefolder%\permissionoutput.txt" "%destinationfolder%\permissionoutput%#%.txt"

ECHO Add another file to combine: y or n?
SET /p addanotherfile=
if /i "%addanotherfile%"=="y" goto start

# 是一个合法的变量名。它被初始化为 -1 然后在每个循环中递增 :start 所以它在 used 时的第一个值是 0。(如果你想从 1 只需将其初始化为 0

接下来 - 您的 sets - BUT 空格在字符串中很重要 set 命令将包含在分配的 variablename/value 中,如果出现在 set 指令中。 "quoting the assignment" 确保行中的任何杂散尾随空格不包含在分配的值中。

好吧 - 接下来,确保文件存在,如果不存在,则生成一条消息并循环回 :again,绕过 #.

的增量

否则,只需复制文件即可。你知道它的 sourcename,你的 destinationname 是通过包含 %#% 来构造的,以包含 # 的当前值(所有批处理变量无一例外都是字符串 - set /a 指令只是从字符串转换为二进制以执行所需的计算,然后将结果转换回字符串以存储在环境中。)

最后,解释添加另一个文件的请求。 if /i 使比较不区分大小写。由于您无法直接控制用户的响应,因此 "quoting each side" 可确保在用户输入 "yup sure 'nuff" 或其他意外响应时不会违反 if 语法。

前导冒号 不是 goto 所必需的。我更喜欢省略它以保持与 call 命令的一致性,其中无冒号表示将调用外部例程,冒号表示例程在此批处理文件中。