ちょっと 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