遅延環境変数 【delayed environment variable expansion】 環境変数の遅延展開
概要
遅延環境変数(delayed environment variable expansion)とは、Windowsのバッチファイル(.batファイル)内で変数を使う際、ブロック内での値の反映を遅延させる機能。変数名をエクスクラメーションマーク(!)で囲って記す。バッチファイルはWindowsのコマンドラインで連続で実行したいコマンドをテキストファイルに記録したもので、ファイル名を指定するだけで1行ずつ次々に実行される。簡易なプログラミング言語としての機能もあり、変数や条件分岐(if文)、繰り返し(for文)、コードブロックなどを利用できる。
仕様上、if文やfor文で複数のコマンドを一つのブロックにまとめると、変数の値への展開はブロックの入り口に到達した時点で行われる。これだとブロック内で値を変更してもそのブロックが終わるまで変更結果が反映されず、ブロック内では常に古い値が参照されてしまう。
これを避けるための仕組みが環境変数の遅延展開で、通常は「%変数名%」とする変数の指定を「!変数名!」とする。こうすると、変数の値への置き換えは実際にその変数が参照されるコマンド行に到達するまで行われない。ブロック内で値を変更した場合でも、後続のコマンドで変更後の値を参照できるようになる。
(2022.4.13更新)