バッチファイルのif文の中で変数をsetし、同じif文の中でその変数を使うと期待通り動きません。
ただし、次のecho %a%が期待通り実行されていることから、if文を抜けた後は変数に値が入るようです。
CMD.EXEの遅延環境変数の展開 - ふなWiki
原因
if文が実行された時点で、if文の中身がすべて読み込まれるためです。実例
次のようなバッチファイルを作成します。if 1 == 1 ( set a="foo" echo %a% pause ) echo %a% pauseこれを実行すると、次のように画面に表示されます。
C:\>if 1 == 1 ( set a="foo" echo pause ) ECHO は <ON> です。 続行するには何かキーを押してください . . . C:\>echo "foo" "foo" C:\>pause 続行するには何かキーを押してください . . .これを見ると、if文がまとめて読み込まれており、同じif文内のechoは%a%に何も入っていない状態で実行されていることがわかります。
ただし、次のecho %a%が期待通り実行されていることから、if文を抜けた後は変数に値が入るようです。
補足
for文内や、set /a、set /pでも同様の問題が起こります。対策
gotoをうまく使うなどの工夫をするか、遅延環境変数に置き換えてみましょう。CMD.EXEの遅延環境変数の展開 - ふなWiki