因此,在批处理脚本中,我正在从文件夹中获取单个文件,将其复制到目标文件夹,并根据脚本循环的次数重命名。基本上我需要从一堆不同的文件夹中分别命名一个文件,该文件分布在多台计算机上,然后将它们复制到一个新文件夹中进行操作。我已经阅读了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
更新:代码已更正,答案完全正常,可用作参考
答案 0 :(得分:1)
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
,因此当使用时,它将具有的第一个值为0.(如果您想要从1
开始,只需将其初始化为0
而不是
下一步 - sets
- BUT 空格在字符串set
命令中很重要,如果存在于{{1}中,则会包含在分配的变量名/值中指令。 "引用作业"确保该行上的任何杂散尾随空格不包含在指定的值中。
好吧 - 接下来,确保该文件存在且是否存在,然后生成一条消息并循环回set
,绕过:again
的增量。
否则,只需复制文件即可。您已了解其源名称,并且通过包含#
以包含%#%
的当前值来构建您的目标名称(所有批处理变量无例外都是字符串 - 仅#
指令从字符串转换为二进制以执行所需的计算,然后将结果转换回字符串以便在环境中存储。)
最后,解释添加另一个文件的请求。 set /a
使比较不区分大小写。由于您无法直接控制用户的响应,因此引用每一方"确保在用户输入"我确定' nuff"的情况下,if /i
语法不会被违反。或其他一些意想不到的回应。
if
中的前导冒号不。我更喜欢省略它以保持与goto
命令的一致性,其中no-colon表示将调用外部例程,冒号表示例程在此批处理文件中。