嵌套 for - batch

嵌套 for - batch

我对这段代码有一点问题:

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

相关内容