mattintosh note

どこかのエンジニアモドキの備忘録

2024-06-05: 現在ホビー関連の記事を hobby.mattintosh-note.jp に移行しています。
現在掲載されている一部の画像と今後掲載される画像は特定の環境から閲覧できなくなります。

コマンドプロンプトの for 内で変数宣言

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