batファイル 遅延変数のサンプル(if文/for文の注意点)

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%
) 
pause

3行目は、変数に値をセットしています。
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!
) 
pause

2行目を追加し9行目の変数の括りを変更しました。

以下は、実行結果です。

 

遅延変数に対応したfor文

遅延変数に対応したfor文のサンプルです。

@echo off
setlocal enabledelayedexpansion

set num1 = 0

for /l %%i in (1,1,3) do (
	set /a num1+=%%i
	echo !num1!
)
pause

2行目を追加し8行目の変数の括りを変更しました。
結果は、1,3,6が出力されます。

以下は、実行結果です。

関連の記事

batファイル If文のサンプル(Windows)
batファイル for文 処理を繰り返すサンプル

△上に戻る