Windowsのbatファイルの遅延変数のサンプルです。
if文やfor文で変数を使用するときの注意点 です。(確認環境:Windows10)
目次
| サンプル | 遅延変数のサンプル(if文) | 
| 遅延変数に対応したif文 | |
| 遅延変数に対応したfor文 | 
遅延変数のサンプル(if文)
遅延変数はJavaScriptなどの他言語と異なる動きをするので注意が必要です。
3,6行目が遅延変数です。
@echo off
set num=1
set output=初期値です
if %num%==1 (
	set output=1をセット
	echo %output%
) 
pause3行目は、変数に値をセットしています。
5行目のif文の判定でtrueになり6行目以下が実行されます。
6行目は、変数に値をセットしています。
7行目は、6行目にセットした値が表示されそうですが、3行目の値が表示されます。
Windwosのbatファイルの仕様です。
以下は、実行結果です。

遅延変数に対応したif文
遅延変数の対応には以下を行います。
1.先頭に「setlocal enabledelayedexpansion」を記述します。
上記文字を分割するとenable delayed expansion(遅延展開を有効にする)です。
2.変数名を!で括ります。
@echo off
setlocal enabledelayedexpansion
set num=1
set output=初期値です
if %num%==1 (
	set output=1をセット
	echo !output!
) 
pause2行目を追加し9行目の変数の括りを変更しました。
以下は、実行結果です。

遅延変数に対応したfor文
遅延変数に対応したfor文のサンプルです。
@echo off
setlocal enabledelayedexpansion
set num1 = 0
for /l %%i in (1,1,3) do (
	set /a num1+=%%i
	echo !num1!
)
pause2行目を追加し8行目の変数の括りを変更しました。
結果は、1,3,6が出力されます。
以下は、実行結果です。

関連の記事
