【问题标题】: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进行了讨论

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 2014-03-11
      相关资源
      最近更新 更多