对多个文件夹

时间:2017-08-14 20:14:40

标签: batch-file copy xcopy

因此,在批处理脚本中,我正在从文件夹中获取单个文件,将其复制到目标文件夹,并根据脚本循环的次数重命名。基本上我需要从一堆不同的文件夹中分别命名一个文件,该文件分布在多台计算机上,然后将它们复制到一个新文件夹中进行操作。我已经阅读了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

更新:代码已更正,答案完全正常,可用作参考

1 个答案:

答案 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表示将调用外部例程,冒号表示例程在此批处理文件中。