Причина, по которой оригинальный код не работает, заключается в том, что каталог для опции FOR / R должен быть известен во время синтаксического анализа FOR, но переменная %% i не раскрывается до после оператор FOR уже проанализирован.Та же проблема существует для предложения adarshr -! Суффикс!не раскрывается до тех пор, пока не будет проанализирован оператор FOR.
Ответ GG - очень хороший жизнеспособный обходной путь.Возможно, можно было бы улучшить PUSHD, а затем POPD вместо CD.Но только в случае необходимости.
Единственный другой способ обойти проблему - это что-то вроде этого
@echo off
FOR %%i IN (3) DO call :innerLoop %%i
exit /b
:innerLoop
FOR /R "C:\backup\server%1\temp" %%? IN (*.bak) DO (
REM some code...
)
exit /b
Но я не люблю использовать CALL, если не обязан, потому чтоэто неэффективно.Мне нравится CD решение.