Batch: Returning a value from a SETLOCAL EnableDelayedExpansion

前端 未结 1 1055
没有蜡笔的小新
没有蜡笔的小新 2021-01-14 02:39

I wonder why this code does not work as expected:

@ECHO off
SET S1=HELLO

SETLOCAL EnableDelayedExpansion
SET S2=!S1! WORLD^^!
ECHO !S2!
ENDLOCAL & SET S         


        
相关标签:
1条回答
  • 2021-01-14 03:28

    It works as expected.
    The delayed expansion will expand variables at execution time, not parse time, so it interpret your line ENDLOCAL & SET S1=!S2! as
    endlocal
    But at the part of SET S1=!S2! the delayed expansion is off so it can't be expanded anymore.

    In your case you could use ENDLOCAL & SET S1=%S2%

    As the exclamation mark is S2 is "safe", as the delayed exp. is off at the moment of execution.

    But an always secure returning is a bit more complicated.
    We discussed it at Dostips: Return ANY string across ENDLOCAL boundry

    0 讨论(0)
提交回复
热议问题