Windows XP 以递归方式复制带扩展名的文件

Windows XP 以递归方式复制带扩展名的文件

我有一个单行脚本,可以递归地将所有“.ext1”文件从当前文件夹复制到目标文件夹:

xcopy *.ext1 D:\dest /s /d /y

它运行完美。

现在我想复制所有 *.ext2。而不是复制粘贴(这样很好):

xcopy *.ext1 D:\dest /s /d /y
xcopy *.ext2 D:\dest /s /d /y

我想使用一个for命令:

for %%f in (*.ext1 *.ext2) do xcopy %%f D:\dest /s /d /y

但它不起作用:

  1. 它不会复制源文件夹的子目录
  2. 它不会复制名称中带有空格的文件,例如“read me.ext1”

我尝试使用一个/R密钥:

for /R %%f in (*.ext1 *.ext2) do xcopy %%f D:\dest /s /d /y

但它导致将子目录源文件复制到目标根文件夹中。 并且带有空格的名称没有被删除。

该命令的正确形式是什么for

答案1

尝试这个:

for %%f in (.ext1 .ext2) do xcopy *%%f D:\dest /s /d /y

答案2

据我所知你唯一的选择多次调用 xcopy。如果您想要某种形式的代码重用,我看到两个选项:

将参数定义为变量并使用它们:

set dest=d:\dest
set options=/s /d /y

xcopy *.ext1 %dest% %options%
xcopy *.ext2 %dest% %options%

或者创建一个子程序来进行复制:

call :do_copy ext1
call :do_copy ext2

goto :eof

:do_copy
   xcopy *.%1 d:\dest /s /d /y
   goto :eof

答案3

您不能在正则中包含通配符,for因为它们总是会被扩展(如果没有匹配项,则会被忽略)。如果 Endoro 的答案对您不起作用,您可以从文件或命令的输出中读取通配符列表。示例:

for /f %%f in ('echo *.ext1 ^& echo *.ext2') do xcopy %%f D:\dest /s /y

相关内容