http://q.hatena.ne.jp/1256324363にて、バッチファイルの遅延展開が原因だということが

わかったのですが、webサイトを調べても正直言って遅延展開がどういったメリット・デメリットがあるのかよくわかりません。簡単な事例や一言で言ってどういう内容か教えていただけないでしょうか。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2009/10/31 03:26:12
  • 終了:2009/11/04 11:17:09

回答(2件)

id:kei10in No.1

kei10in回答回数2ベストアンサー獲得回数12009/10/31 05:36:25

ポイント35pt

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
id:ohmix1 No.2

ohmix1回答回数235ベストアンサー獲得回数142009/10/31 11:06:44

ポイント35pt

ダミー 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------ここまで]

  • id:kuruma_neko
    まとめると
    1.遅延環境変数とは、( ) 内を実行する前に、( ) 内で展開可能な環境変数を全て展開される
    2.「遅延環境変数」という言葉があるわけではなく、「環境変数の遅延展開」というイメージ

    ですかね。初めて、遅延展開が問題になったので、大変でした。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません