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

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

Я не получаю сообщение об ошибке или что-то в этом роде, код просто работает, но не работает. Кто-нибудь может дать мне свет? Спасибо!

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .