我对这段代码有一点问题:
for %%A in (tmp1,tmp2,tmp3) do (
for /R C:\%%A %%B in (*.txt) do copy %0 "%%~B" /Y
)
我没有收到任何错误消息或类似信息,代码只是运行,但不起作用。有人能给我一些启发吗?谢谢!
答案1
批处理解析器有许多阶段。请参阅Windows 命令解释器(CMD.EXE)如何解析脚本?了解更多信息。
FOR 语句选项在 FOR 变量扩展之前进行解析,因此不能在 FOR 选项中使用 FOR 变量(或延迟扩展)。
我看到两种解决方法:
1) 将 PUSHD 推送到根文件夹,以便/R
当前目录正常工作。
我最喜欢这个选项。
for %%A in (tmp1,tmp2,tmp3) do (
pushd c:\%%A
for /R %%B in (*.txt) do copy %0 "%%~B" /Y
popd
)
2)将值传递给 CALL 参数
for %%A in (tmp1,tmp2,tmp3) do call :copyLoop c:\%%A
exit /b
:copyLoop
for /r %1 %%B in (*.txt) do copy %0 "%%~B" /Y
exit /b