![ネストされた for - バッチ](https://rvso.com/image/1444057/%E3%83%8D%E3%82%B9%E3%83%88%E3%81%95%E3%82%8C%E3%81%9F%20for%20-%20%E3%83%90%E3%83%83%E3%83%81.png)
このコードにはちょっとした問題があります:
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