我對這段程式碼有個小問題:
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