ネストされた 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 変数 (または遅延拡張) を使用できません。

回避策は 2 つあります。

/R1)現在のディレクトリで適切に動作する ように、ルート フォルダーに 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

関連情報