バッチファイルの遅延環境変数の展開について知らなかったため、先日バッチファイル作成時にハマってしまった。調べればもっとわかりやすいサイトもあるが、自分でもスクリプト作って調査・確認をしたので備忘として残しておく。 環境変数の展開というバッチファイルの罠 バッチファイルは1行1行読み込みながらコマンドを解釈して処理を実行する。変数がある場合は、1行読み込んだ際に値を代入して処理をする。しかし、if文やfor文の場合は、if文の中身も含めて一気に変数に値を代入する(環境変数が展開される)という、バッチファイルならではの癖がある。 例を出そう。以下は1~10までを足し算するバッチファイルである。 rem 1~10までを足し算する @echo off set i=0 for /l %%X in (1,1,10) do ( set /a i=%i% + %%X echo %i% ) echo %i%