2012-02-23 44 views
3

我不知道爲什麼預期該代碼不起作用返回值:批次:從SETLOCAL EnableDelayedExpansion

@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! 

謝謝。

回答

7

它按預期工作。
延遲的擴張將在執行時擴展變量,而不是解析時間,所以它解釋您的線路ENDLOCAL & SET S1=!S2!
endlocal
但在SET S1=!S2!部分延遲擴展關閉,因此它不能再擴展。

你的情況,你可以使用 ENDLOCAL & SET S1=%S2%

由於感嘆號S2是「安全」,作爲延遲EXP。在執行時關閉。

但總是安全的返回有點複雜。
我們在Dostips: Return ANY string across ENDLOCAL boundry

+0

+1討論它說的是jeb ... – Aacini 2012-02-23 09:31:08