暂时中断SETLOCAL

时间:2012-01-17 18:51:20

标签: batch-file windows-xp cmd

我有一个很多使用SETLOCAL ENABLEDELAYEDEXPANSION命令的脚本,因此我以这种方式启动脚本(减少头痛)。但是,它不允许您使用!字符而不转义它的每个实例(我想为错误记录部分= D创建一长串!并且我不知道我想逃离他们每一个人。

有没有办法暂时退出SETLOCAL,然后重新输入,将所有以前创建的变量保留在原始SETLOCAL内?

例如:

SETLOCAL ENABLEDELAYEDEXPANSION
set var=HELLO
ECHO %var%
ENDLOCAL

SETLOCAL ENABLEDELAYEDEXPANSION
ECHO %var%

第二个ECHO不会为您提供之前的var

编辑:^不允许您逃离!内的SETLOCAL ENABLEDELAYEDEXPANSION

2 个答案:

答案 0 :(得分:1)

setlocal DisableDelayedExpansion
set var=Value! with! many! Bangs!
setlocal EnableDelayedExpansion
echo !var!

答案 1 :(得分:1)

你可以像Aacini那样嵌套它 或者您可以使用返回技术或使用!

在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%

返回技术也可用于感叹号,但后来有点复杂 它可以在Make an environment variable survive ENDLOCAL

找到