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が出力されます。
以下は、実行結果です。
関連の記事