Назначения в блоках IF или FOR выполняются немедленно. То, что не реализовано должным образом, является установлением переменных величин , заключенных в знаки процента . Вы должны заметить, что значение% variable% заменяется перед выполнением строки . Например:
set var=Old value
set var=New value & echo %var%
Предыдущие команды показывают: «Старое значение». Способ решения этой проблемы - через отложенное расширение, то есть заключить переменную в восклицательные знаки вместо процентов и добавить команду setlocal ... в начале. То есть:
setlocal EnableDelayedExpansion
set var=Old value
set var=New value & echo !var!
Таким образом,! Var! значение заменяется до тех пор, пока не будет выполнена команда echo! var! (расширение с задержкой) и после выполнения предыдущей команды set , поэтому предыдущие команды показывают: «Новое значение».
Это же предположение применимо к любой переменной в скобках . Например:
set var=Old value
if 1 == 1 (
set var=New value
echo %var%
)
... неверно, поскольку значение% var% раскрывается только один раз перед выполнением всего IF (или FOR) . Вы должны использовать:
setlocal EnableDelayedExpansion
set var=Old value
if 1 == 1 (
set var=New value
echo !var!
)
Введите SET /? для получения более подробной информации.