試した環境
- Windows10
本題
前回の記事でset
コマンドで変数を含む文字列を入力したときに、入力した段階で展開される場合と後から展開されるような場合がありることを書きました。
その挙動の応用みたいなものですが、遅延環境変数を有効化するsetlocal EnableDelayedExpansion
を宣言するタイミングで挙動が異なる場合があります。
まず最初の例です。
set
コマンドの前にsetlocal EnableDelayedExpansion
を宣言します。
この場合はset
コマンドで入力した文字列の変数は入力した段階で展開されます。
実行するスクリプトは以下の通りです。
@echo off setlocal EnableDelayedExpansion set Param=images\!frame!.png echo %Param% for /l %%f in (0 1 15) do ( set frame=000000%%f set frame=!frame:~-6! echo %Param% )
結果は以下の通りです。
$ echotest_2.bat images\.png images\.png images\.png images\.png images\.png images\.png images\.png images\.png images\.png images\.png images\.png images\.png images\.png images\.png images\.png images\.png images\.png
次の例です。
setlocal EnableDelayedExpansion
を宣言する位置を変えます。
set
コマンドの後にsetlocal EnableDelayedExpansion
を宣言します。
この場合はset
コマンドで入力した文字列の変数は後から展開されるような挙動をします。
実行するスクリプトは以下の通りです。
@echo off set Param=images\!frame!.png echo %Param% setlocal EnableDelayedExpansion for /l %%f in (0 1 15) do ( set frame=000000%%f set frame=!frame:~-6! echo %Param% )
結果は以下の通りです。
$ echotest_2.bat images\!frame!.png images\000000.png images\000001.png images\000002.png images\000003.png images\000004.png images\000005.png images\000006.png images\000007.png images\000008.png images\000009.png images\000010.png images\000011.png images\000012.png images\000013.png images\000014.png images\000015.png