巢狀 for - 批次

巢狀 for - 批次

我對這段程式碼有個小問題:

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

相關內容