バッチファイルの set コマンドで変数を含む文字列を入力したときに、その段階で展開される例と後から展開されるような振る舞いをする例

試した環境

  • Windows10

本題

その段階で展開される例

バッチファイルの set コマンドで変数を含む文字列を入力した場合、展開されて入力されます。 以下がその例です。 変数frameに後から00001を代入していますが、最後の行のecho %Param%で反映されていません。

@echo off

set frame=
echo %frame%
set Param=images\%frame%.png
echo %Param%
set frame=00001
echo %Param%
$ echotest.bat
ECHO は <OFF> です。
images\.png
images\.png

後から展開されるような振る舞いをする例

ただし以下の場合では setコマンドの段階では後から展開されるような振る舞いをします。

@echo off

set Param=images\%%f.png
echo %Param%
echo.

for /l %%f in (0 1 7) do (
    echo %Param%
)
$ test.bat
images\%f.png

images\0.png
images\1.png
images\2.png
images\3.png
images\4.png
images\5.png
images\6.png
images\7.png