【问题标题】:Batch: Returning a value from a SETLOCAL EnableDelayedExpansion批处理:从 SETLOCAL EnableDelayedExpansion 返回一个值
【发布时间】:2012-02-23 07:42:01
【问题描述】:
我想知道为什么这段代码不能按预期工作:
@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!
谢谢。
【问题讨论】:
标签:
string
shell
batch-file
console
delayedvariableexpansion
【解决方案1】:
它按预期工作。
延迟扩展将在执行时而不是解析时扩展变量,因此它将您的行 ENDLOCAL & SET S1=!S2! 解释为
endlocal
但在SET S1=!S2! 部分,延迟扩展已关闭,因此无法再扩展。
在您的情况下,您可以使用
ENDLOCAL & SET S1=%S2%
因为感叹号是 S2 是“安全的”,因为延迟的 exp。在执行时关闭。
但始终安全返回有点复杂。
我们在Dostips: Return ANY string across ENDLOCAL boundry进行了讨论