このコードにはちょっとした問題があります:
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 変数 (または遅延拡張) を使用できません。
回避策は 2 つあります。
/R
1)現在のディレクトリで適切に動作する ように、ルート フォルダーに PUSHD します。
このオプションが最も気に入っています。
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