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命令中创建的所有变量。