バッチファイル | if文やfor文などで変数の値を上書きできない場合の対処法

2023-09-11バッチファイル 基本,コマンドプロンプト

バッチファイル | if文やfor文などで変数の値を上書きできない場合の対処法

Windowsのコマンド・プロンプトを実行するバッチファイルにてfor文の中などで変数の値を上書きできない場合の対処方法とサンプルコードを紹介しています。

確認環境
  • HP ノートパソコン HP 17s
  • OS Windows11 22H2

if文やfor文などで変数の値を上書きできない場合の対処法

デフォルトではバッチファイルのif文やfor文などの中では、変数は初期値が展開される仕組みとなっています。

例えば以下のコードの場合、出力される値は「0」「0」「0」となります。
また、ループ処理後に呼び出した場合は「3」が出力されます。

set x=0
for /l %%i in (1,1,3) do (
	set /a x+=1
	echo %x%
)

上書きされた変数の値が必要な場合は「setlocal enabledelayedexpansion」を設定する事で、変数の展開を遅延評価する事が可能になります。
遅延展開された変数を出力する場合「!変数名!」を利用します。

setlocal enabledelayedexpansion
set x=0
for /l %%i in (1,1,3) do (
	set /a x+=1
	echo !x!
)

上記のサンプルコードのようにする事で変数の値は「1」「2」「3」と出力されるようになります。