Это не очевидно! Это специальный разбор FOR !
Команда FOR анализируется непосредственно после фазы перехода / специального символа (для определения скобок), но в результате вы не можете использовать задержанное или %% var расширение в качестве параметров.
FOR %%a in (%%%%B) do (
FOR %%a in (1) DO ( <<< this %%a will not replaced with %%B
echo %%a - shows 1, because %%a is the name of the inner variable
echo %%B - doesn't work
)
)
А также это не может работать:
set chars=abc
FOR /F "delims=!chars!" %%N in (bla) DO ....
не устанавливает a , b и c в качестве разделителей, но ! , c , ч , a и r вместо.
РЕДАКТИРОВАТЬ: В скобках отложенное расширение работает, как и ожидалось:
set var=C:\temp
For %%a in (!var!) DO echo %%a
Я ожидаю, что вам придется использовать функцию для решения вашей проблемы.