バッチスクリプトでハマッたのでメモ。
if文、for文の中で変数を変更しても、変数の値が反映されない。
これは、if文、for文処理が「終わった後」に変数の値が反映される仕様だから。
問題事象と解決策は以下のとおり。
【問題事象】
@echo off setlocal set TEST="aaaa" if %TEST% == "aaaa" ( set TEST="bbbb" echo %TEST% ) endlocal
↓出力
aaaa
【解決策】
enabledelayedexpansion
で「遅延環境変数」を有効にすると、変数名を”!”(感嘆符)で囲うことですぐに反映させることができる。
@echo off setlocal enabledelayedexpansion set TEST="aaaa" if %TEST% == "aaaa" ( set TEST="bbbb" echo !TEST! ) endlocal
↓出力
bbbb