4

このコードが期待どおりに機能しないのはなぜでしょうか。

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

ありがとう。

4

1 に答える 1

9

期待どおりに動作します。
遅延展開は、解析時ではなく実行時に変数を展開するため、行は次のように解釈さENDLOCAL & SET S1=!S2!れますが、遅延展開
endlocal
の一部SET S1=!S2!がオフになっているため、これ以上展開できません。

あなたの場合、使用できます ENDLOCAL & SET S1=%S2%

エクスクラメーション マークが遅れているので、S2 は「安全」です。実行時にオフです。

しかし、常に安全な復帰はもう少し複雑です。
Dostipsで説明しました: ENDLOCAL 境界を越えて ANY 文字列を返す

于 2012-02-23T08:29:02.277 に答える