0

if ブロック内で環境変数 BOOBOO の値を設定しても、設定されていないようです。ただし、if ブロックの終了後に設定されます。if ブロック内に値がないのはなぜですか?

Microsoft Windows XP [バージョン 5.1.2600] SP3 上で動作

echo BOOBOO is +++%BOOBOO%+++
echo step 1
setlocal enableextensions
IF "%BOOBOO%" == "" (
    echo step 2
    SET BOOBOO=xyz
    echo step 3
    echo BOOBOO has been set to %BOOBOO%
    echo BOOBOO part is %BOOBOO:~0,2%
    echo step 4
)
echo step 8
echo BOOBOO ends up as %BOOBOO%
echo step 9
EXIT /B 0

===

M:> t
BOOBOO is ++++++
step 1
step 2
step 3
BOOBOO has been set to
BOOBOO part is ~0,2
step 4
step 8
BOOBOO ends up as xyz
step 9
4

1 に答える 1

1

値はIFブロック内で設定されますが、値は解析時に展開され、IFコマンドが実行される前にブロック全体が一度に解析されるため、通常の展開では変更を確認できません。したがって、IFブロックに入る前に存在していた値を取得しています。

遅延拡張はすでに有効になっています。あなたはそれを使う必要があります。

echo BOOBOO has been set to !BOOBOO!
echo BOOBOO part is !BOOBOO:~0,2!
于 2013-02-06T23:05:30.360 に答える