![Вложенный для - пакет](https://rvso.com/image/1444057/%D0%92%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%20%D0%B4%D0%BB%D1%8F%20-%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82.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.
Я вижу два пути решения:
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