人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

http://q.hatena.ne.jp/1256324363にて、バッチファイルの遅延展開が原因だということが
わかったのですが、webサイトを調べても正直言って遅延展開がどういったメリット・デメリットがあるのかよくわかりません。簡単な事例や一言で言ってどういう内容か教えていただけないでしょうか。

●質問者: kuruma_neko
●カテゴリ:コンピュータ
✍キーワード:webサイト デメリット バッチ ファイル メリット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kei10in
●35ポイント

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

2 ● ohmix1
●35ポイント

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ