ちょっと Windows でバッチを書く用事があったので for を使ってたんだけどなんかおかしい。
for /f delims^= %%i in (foo.txt) do ( set foo=%%i @echo %foo% )
こうすると何故か最終行をひたすら出力する。set はきちんと行われているはずなのに…?
色々調べてみると setlocal enabledelayedexpansion(遅延環境変数展開)を設定しないとローカル変数が使えないらしい。
setlocal enabledelayedexpansion for /f delims^= %%i in (foo.txt) do ( set foo=%%i @echo !foo! ) setlocal disabledelayedexpansion
しかも cmd.exe で実行する場合は %i でいいのにバッチファイルにすると %%i にしなくちゃいけないとか何この仕様...orz