まったく奇妙なことが起こったので、これが予期された動作なのか、それともバッチ ファイル処理で何らかの奇妙なバグを発見したのか疑問に思っていました。私がやろうとしていることの詳細には触れませんが、以下は、私が話している動作を示すサンプル スクリプトです。
多かれ少なかれ、私が経験しているのは、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 のはず)
繰り返しになりますが、これは予想される動作ですか (そしてその理由は) ? それとも、ある種のバグに遭遇しましたか?