Verschachtelt für - Batch

Verschachtelt für - Batch

Ich habe ein kleines Problem mit diesem Code:

for %%A in (tmp1,tmp2,tmp3) do (
    for /R C:\%%A %%B in (*.txt) do copy %0 "%%~B" /Y
)

Ich bekomme keine Fehlermeldung oder ähnliches, der Code läuft einfach, funktioniert aber nicht. Kann mir jemand weiterhelfen? Danke!

Antwort1

Der Batch-Parser besteht aus mehreren Phasen. SieheWie analysiert der Windows-Befehlsinterpreter (CMD.EXE) Skripts?Für mehr Information.

Die Optionen der FOR-Anweisung werden vor der FOR-Variablenerweiterung analysiert. Daher können Sie innerhalb von FOR-Optionen keine FOR-Variablen (oder eine verzögerte Erweiterung) verwenden.

Ich sehe zwei Problemumgehungen:

1) PUSHD in den Stammordner, damit es /Rrichtig mit dem aktuellen Verzeichnis funktioniert.
Diese Option gefällt mir am besten.

for %%A in (tmp1,tmp2,tmp3) do (
  pushd c:\%%A
  for /R %%B in (*.txt) do copy %0 "%%~B" /Y
  popd
)

2) Übertragen Sie den Wert in ein CALL-Argument

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

verwandte Informationen