Batch file 临时中断本地设置

Batch file 临时中断本地设置,batch-file,windows-xp,cmd,Batch File,Windows Xp,Cmd,我有一个脚本,它大量使用了setlocalenabledayedexpansion命令,因此我以这种方式启动脚本(减少了麻烦)。但是,它不允许您使用字符而不转义它的每个实例(我想为一个错误记录部分=D创建一长行!s),我不想转义它们中的每一个 是否有办法暂时中断SETLOCAL,然后重新输入,将以前创建的所有变量保留在原始SETLOCAL中 例如: SETLOCAL ENABLEDELAYEDEXPANSION set var=HELLO ECHO %var% ENDLOCAL SETLOCA

我有一个脚本,它大量使用了
setlocalenabledayedexpansion
命令,因此我以这种方式启动脚本(减少了麻烦)。但是,它不允许您使用
字符而不转义它的每个实例(我想为一个错误记录部分=D创建一长行
s),我不想转义它们中的每一个

是否有办法暂时中断
SETLOCAL
,然后重新输入,将以前创建的所有变量保留在原始
SETLOCAL

例如:

SETLOCAL ENABLEDELAYEDEXPANSION
set var=HELLO
ECHO %var%
ENDLOCAL

SETLOCAL ENABLEDELAYEDEXPANSION
ECHO %var%
第二个
ECHO
将不会给出
var


编辑:
^
将不允许您转义
内部
SETLOCAL ENABLEDELAYEDEXPANSION

您可以像Aacini显示的那样嵌套它。
setlocal DisableDelayedExpansion
set var=Value! with! many! Bangs!
setlocal EnableDelayedExpansion
echo !var!
或者您可以使用返回技术或退出
位于启用延迟块内,带有
^^

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%
return技术也可以用于感叹号,但它要复杂一些。

您可以在

设置本地禁用延迟扩展的功能。。。Endlocal'?@jeb但在Endlocal命令之后启用setlocal enabledelayedexpansion将不会保留在上一个setlocal命令中创建的所有变量。