在for循环搜索中排除目录

时间:2016-09-13 15:54:12

标签: batch-file cmd

我有以下代码行:

FOR /R D:\1_FOLDER %f IN (*.jpg,*.png) DO XCOPY %f D:\2_FOLDER /H /C

我遇到的第一个问题是,命令没有运行,我得到了错误

  

参数数量无效

目录1_FOLDER中的第二个问题我还有2个文件夹X_FOLDER和Y_FOLDER,我希望for循环只能在X_FOLDER中搜索,并且只复制X_FOLDER的文件。

当我想从C:\复制时,我遇到了第二个问题,我想从for循环搜索中排除Windows文件夹。

1 个答案:

答案 0 :(得分:0)

当您指定包含 SPACE 字符(或xcopy,,{{1}等其他标记分隔符的未加引号的路径时,错误消息来自; }, TAB 或非中断空格(ASCII =))。

无论如何,实际上我认为没有理由使用0xFF循环来完成手头的任务,因为for /R具有xcopy选项。以下是输入/EXCLUDE时出现的帮助测试的摘录:

xcopy /?

因此,对于您的示例,请使用以下内容创建一个文本文件(我们称之为 /EXCLUDE:file1[+file2][+file3]... Specifies a list of files containing strings. Each string should be in a separate line in the files. When any of the strings match any part of the absolute path of the file to be copied, that file will be excluded from being copied. For example, specifying a string like \obj\ or .obj will exclude all files underneath the directory obj or all files with the .obj extension respectively. ):

exclusions.lst

或者,如果您希望排除任何位置中名为D:\1_FOLDER\Y_FOLDER\ 每个子目录,请写:

Y_FOLDER

由于您要处理多个文件模式(\Y_FOLDER\ *.jpg),因此可以为每个文件模式提供*.png命令行(让xcopy执行通过使用适当的开关递归,而不是包裹xcopy循环):

for /R

或者您可以在另一个文本文件中列出文件模式(我们称之为xcopy /C /H /K /S /I /EXCLUDE:exclusions.lst "D:\1_FOLDER\*.jpg" "D:\2_FOLDER" xcopy /C /H /K /S /I /EXCLUDE:exclusions.lst "D:\1_FOLDER\*.png" "D:\2_FOLDER" ):

patterns.lst

然后,您可以使用*.jpg *.png 循环来读取该文件,并将每个模式/行提供给for /F命令:

xcopy

如果您想直接在命令提示符(for /F "eol=| delims=" %%P in (patterns.lst) do ( xcopy /C /H /K /S /I /EXCLUDE:exclusions.lst "D:\1_FOLDER\%%~nxP" "D:\2_FOLDER" ) )中尝试此操作,请不要忘记将%%替换为%

预计文本文件cmdexclusions.lst都位于当前工作目录中。

请注意,此处显示的所有方法都不会从源中复制任何空目录。

如果您需要高级选项来指定要排除或包含某些文件的过滤器,您可能会对robocopy command感兴趣。