バッチスクリプトでハマッたのでメモ。
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