Как реализовать назначение в блоке if? - PullRequest
1 голос
/ 02 апреля 2012

Назначения (т.е. операторы set), сделанные в блоке if, не реализуются до окончания блока if.Другими словами, вы не можете полагаться на присваивание переменных в блоке if.Как это исправить?

1 Ответ

2 голосов
/ 02 апреля 2012

Назначения в блоках 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 /? для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...