Windowsのバッチファイルにおいて、for文で変数を遅延展開する方法について説明します。
for文内で %変数名%
を使うと、for文を評価する際に変数展開されるため、繰返し処理しても値は固定になります。
しかし、EnableDelayedExpansion を有効化した上で、「%」を「!」に置き換えて !変数名!
を使うと、for文の繰返し処理ごとに変数を展開するため、常に変数の最新の値を取得することができます。
遅延変数展開を無効化したい場合は DisableDelayedExpansion にします。
@echo off
setlocal EnableDelayedExpansion
set COUNTER=123
for %%a in (a,b,c) do (
echo ---%%a---
echo 遅延展開なし: %COUNTER%
echo 遅延展開あり: !COUNTER!
set /A COUNTER+=1
)
setlocal DisableDelayedExpansion
上記プログラムをコマンドプロンプトで実行すると以下のような出力になります。
> test.cmd
---a---
遅延展開なし: 123
遅延展開あり: 123
---b---
遅延展開なし: 123
遅延展開あり: 124
---c---
遅延展開なし: 123
遅延展開あり: 125
以上です。