我有一个单行脚本,可以递归地将所有“.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
但它不起作用:
- 它不会复制源文件夹的子目录
- 它不会复制名称中带有空格的文件,例如“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