String 批处理:从SETLOCAL EnableDelayedExpansion返回值
我想知道为什么此代码不能按预期工作:String 批处理:从SETLOCAL EnableDelayedExpansion返回值,string,shell,batch-file,console,delayedvariableexpansion,String,Shell,Batch File,Console,Delayedvariableexpansion,我想知道为什么此代码不能按预期工作: @ECHO off SET S1=HELLO SETLOCAL EnableDelayedExpansion SET S2=!S1! WORLD^^! ECHO !S2! ENDLOCAL & SET S1=!S2! ECHO %S1% PAUSE 输出: HELLO WORLD! !S2! 预期产出: HELLO WORLD! HELLO WORLD! 谢谢。它按预期工作。 延迟扩展将在执行时而不是解析时扩展变量,因此它将解释您的行END
@ECHO off
SET S1=HELLO
SETLOCAL EnableDelayedExpansion
SET S2=!S1! WORLD^^!
ECHO !S2!
ENDLOCAL & SET S1=!S2!
ECHO %S1%
PAUSE
输出:
HELLO WORLD!
!S2!
预期产出:
HELLO WORLD!
HELLO WORLD!
谢谢。它按预期工作。延迟扩展将在执行时而不是解析时扩展变量,因此它将解释您的行
ENDLOCAL&SET S1=!S2代码>作为
endlocal
但是在集合S1=!S2代码>延迟扩展已关闭,因此无法再扩展
在你的情况下,你可以使用
ENDLOCAL&设置S1=%S2%
因为感叹号是S2,所以S2是“安全的”,因为延迟的exp.在执行时是关闭的
但始终安全的返回稍微复杂一些。
我们在会议上讨论了这个问题