Подтвердить что ты не робот

Включить и отключить Delayed Expansion, что он делает?

Я видел SETLOCAL ENABLEDELAYEDEXPANSION и SETLOCAL DISABLEDELAYEDEXPANSION во многих пакетных файлах, но что делают на самом деле команды?

4b9b3361

Ответ 1

enabledelayeexpansion инструктирует cmd распознавать синтаксис !var!, который обращается к значению current var. disabledelayedexpansion отключает этот объект, поэтому !var! становится просто тем, что в качестве строки.

В блочном выражении (a parenthesised series of statements) выполняется синтаксический анализ целого и , затем. Любой %var% внутри блока будет заменен значением переменной в момент анализа блока - до того, как будет выполнен блок - то же самое относится к FOR ... DO (block).

С помощью !var! вместо %var% открывается измененное значение var.

Ответ 2

Скопировано из Как вы используете SETLOCAL в пакетном файле? (как указал dbenham в своем первом комментарии).

Предположим, что этот код:

If "%getOption%" equ  "yes" (
   set /P option=Enter option: 
   echo Option read: %option%
)

Предыдущий код НЕ будет работать, потому что значение% option% заменяется только один раз, когда команда IF обрабатывается (до ее выполнения). Вам нужно "задержать" расширение переменной до тех пор, пока команда SET/P не изменит значение переменной:

setlocal EnableDelayedExpansion
If "%getOption%" equ  "yes" (
   set /P option=Enter option: 
   echo Option read: !option!
)

Проверьте это:

set var=Before
set var=After & echo Normal: %var%  Delayed: !var!

Выход: Normal: Before Delayed: After