2

まったく奇妙なことが起こったので、これが予期された動作なのか、それともバッチ ファイル処理で何らかの奇妙なバグを発見したのか疑問に思っていました。私がやろうとしていることの詳細には触れませんが、以下は、私が話している動作を示すサンプル スクリプトです。

多かれ少なかれ、私が経験しているのは、if ステートメント内から呼び出される関数呼び出し内で設定されたグローバル環境変数が、if ステートメントが終了するまで実際には設定されないということです!

@echo off
set myvar=1

echo %myvar% (should be 1)

if [%fakevar%] == [] (
    call:setEnvVars
    echo %myvar% (should be 2^) 
)
echo %myvar% (should be 2)

:setEnvVars
    set myvar=2
GOTO:EOF

出力は次のとおりです。

1 (1 のはず)
1 (
2 のはず) 2 (2 のはず)

繰り返しになりますが、これは予想される動作ですか (そしてその理由は) ? それとも、ある種のバグに遭遇しましたか?

4

1 に答える 1

4

あなたの問題はifコマンドとは関係ありませんが、遅延拡張とは関係ありません。この例を試してください:

@echo off
set myvar=1
echo %myvar%  & set myvar=2 & echo %myvar%

それとこれを比較してください:

@echo off
setlocal EnableDelayedExpansion
set myvar=1
echo %myvar% & set myvar=2 & echo !myvar!

詳細については、このフォーラムで「Delayed Expansion」を検索するか、set /?コマンド ヘルプの説明を参照してください。

于 2013-07-07T12:21:30.847 に答える