Вложенный для - пакет

Вложенный для - пакет

У меня возникла небольшая проблема с этим кодом:

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

Связанный контент