わかったのですが、webサイトを調べても正直言って遅延展開がどういったメリット・デメリットがあるのかよくわかりません。簡単な事例や一言で言ってどういう内容か教えていただけないでしょうか。
http://f32.aaa.livedoor.jp/~kobun/index.php?CMD.EXE%A4%CE%C3%D9%...
遅延展開のメリットです.
for コマンドの中で同じ名前の環境変数に毎回異なる値を代入したい,といったときに遅延展開を使います.
1 2 3 というリストが与えられたとき,すべてに拡張子 .txt を付加する場合,
以下のバッチでは期待通りに実行されません.
@echo off set ext=.txt for %%f in (1 2 3) do ( set fname=%%f%ext% echo %fname% )
結果は以下の全部 3.txt になります.
3.txt 3.txt 3.txt
期待通りの結果を得たいときは,遅延展開を利用します.
@echo off setlocal enabledelayedexpansion set ext=.txt for %%f in (1 2 3) do ( set fname=%%f%ext% echo !fname! ) endlocal
ダミー http://q.hatena.ne.jp/1256927168
通常、環境変数は1行で1回しか展開されません。
これは、FORループ中でも同じで何回ループしても最初の1回目しか展開されません。
これを補うために拡張されたのが遅延展開です。
たとえばFORループの中で毎回環境変数を展開するには%XXX%ではなく!XXX!と指定します。
[test.bat------ここから]
SETLOCAL DISABLEDELAYEDEXPANSION
SET XXX=0
FOR /L %%I IN (1,1,5) DO SET XXX=%XXX%,%%I
ECHO %XXX%
ENDLOCAL
REM 遅延展開
SETLOCAL ENABLEDELAYEDEXPANSION
SET XXX=0
FOR /L %%I IN (1,1,5) DO SET XXX=!XXX!,%%I
ECHO %XXX%
ENDLOCAL
[test.bat------ここまで]
コメント(1件)
1.遅延環境変数とは、( ) 内を実行する前に、( ) 内で展開可能な環境変数を全て展開される
2.「遅延環境変数」という言葉があるわけではなく、「環境変数の遅延展開」というイメージ
ですかね。初めて、遅延展開が問題になったので、大変でした。