バッチファイル

バッチファイルで遅延環境変数を利用してみた

バッチファイルとは、Windows環境で実行できるコマンド列を記述したテキストファイルであるが、for文やif文で設定した変数を、for文やif文内で反映されるようにするには、遅延環境変数を利用する必要がある。

今回は、バッチファイル内で遅延環境変数を利用してみたので、そのサンプルプログラムを共有する。

前提条件

Windowsがインストールされた端末で操作すること。

サンプルプログラムの作成

サンプルプログラムの構成は、以下の通り。
サンプルプログラムの構成

バッチファイルの中身は以下の通りで、for文内やif文内で遅延環境変数を利用している。

@echo off

REM 遅延環境変数を利用するためにこの宣言を入れる
setlocal enabledelayedexpansion

REM 遅延環境変数(変数を!で囲んだもの)を利用すると、
REM その変数を読み込むタイミングを、『行に入った瞬間』から
REM 『その変数を使うコマンドにたどり着いた瞬間』に変更できるので、
REM for文やif文内で変更した変数の値が反映されている。


REM 初期値を宣言
set num=0

REM 遅延環境変数の利用(for文)
echo.
echo ***** for文内で遅延環境変数を利用 *****
echo.

for /l %%a in (1, 1, 3) do (
    set /a num = %num% + %%a
    
    echo numの値^(遅延環境変数を利用しない場合^): %num%
    echo numの値^(遅延環境変数を利用する場合^)  : !num!
    echo.
)
echo.

REM for文を抜けると、for文内で変更した変数の値が反映されている
echo ***** for文終了後のnumの値 *****
echo %num%
echo.
echo.

REM 遅延環境変数の利用(if文)
echo ***** if文内で遅延環境変数を利用 *****
echo.

if %num% equ 3 (
    set /a num = %num% + 10
    
    echo numの値^(遅延環境変数を利用しない場合^): %num%
    echo numの値^(遅延環境変数を利用する場合^)  : !num!
    echo.
)

REM if文を抜けると、if文内で変更した変数の値が反映されている
echo ***** if文終了後のnumの値 *****
echo %num%
echo.

REM 遅延環境変数を利用するための宣言を終了する
endlocal



「EaseUS Partition Master」はパーティション分割・結合・作成・サイズ変更等を直感的に行える便利ツールだったハードディスクの記憶領域を論理的に分割し、分割された個々の領域のことを、パーティションといいます。 例えば、以下の図の場合、C/D...

サンプルプログラムの実行結果

サンプルプログラムの実行結果は、以下の通り。

1) コマンドプロンプトを起動し、バッチファイルが存在するディレクトリ(C:\tmp)に移動し、各ファイルの存在を確認する。
サンプルプログラムの実行結果_1

2) バッチファイル(use_delay_expansion.bat)を実行する。実行すると、コマンドプロンプトには以下の値が表示される。
サンプルプログラムの実行結果_2

要点まとめ

  • バッチファイル内で、for文やif文で設定した変数を、for文やif文内で反映されるようにするには、遅延環境変数を利用する必要がある。