Временно прервать SETLOCAL - PullRequest
0 голосов
/ 17 января 2012

У меня есть сценарий, который часто использует команду SETLOCAL ENABLEDELAYEDEXPANSION, поэтому я запускаю сценарий таким образом (меньше головной боли). Однако он не позволяет вам использовать символ ! без экранирования каждого его экземпляра (и я хочу создать длинную строку ! s для раздела регистрации ошибок = D), и я не хочу экранировать каждый из них.

Есть ли способ временно выйти из SETLOCAL, а затем повторно ввести его, сохранив все ранее созданные переменные в исходном SETLOCAL?

Например:

SETLOCAL ENABLEDELAYEDEXPANSION
set var=HELLO
ECHO %var%
ENDLOCAL

SETLOCAL ENABLEDELAYEDEXPANSION
ECHO %var%

2-й ECHO не даст вам предыдущее значение var

РЕДАКТИРОВАТЬ: ^ не позволит вам избежать ! внутри SETLOCAL ENABLEDELAYEDEXPANSION

Ответы [ 2 ]

1 голос
/ 18 января 2012

Вы можете вложить его так, как Aacini показывает.
Или вы можете использовать метод возврата или escape ! внутри блока EnableDelayed с ^^!

Setlocal EnableDelayedExpansion
echo 1^^!^^!^^!^^!^^!^^!^^!
REM *** Or use a self removing quote
echo !="! 2^!^!^!^!^!^!

Setlocal DisableDelayedExpansion
echo 3 !!!!!!!!
set var=Hello
(
  endlocal
  rem Bring the value behind the endlocal barrier
  set var=%var%
)

echo var is still there, %var%

Метод возврата такжеиспользуется для восклицательных знаков, но тогда это немного сложнее.
Его можно найти в Сделать переменную окружения выжившей ENDLOCAL

1 голос
/ 18 января 2012
setlocal DisableDelayedExpansion
set var=Value! with! many! Bangs!
setlocal EnableDelayedExpansion
echo !var!
...