cmd再入門

普通のプログラム言語に飽きた人達へ

全体表示

[ リスト ]

遅延展開

if や for の中の実行コマンドは、一行とみなされているため、
これらのコマンドの実行開始時には%で囲まれた環境変数は展開済みとなりますが、
複雑なコマンドを書くときに、都合の悪いことが多々あります。

カレントディレクトリ内のファイル名を ; で区切って環境変数に設定する


filelist.cmd

@echo off
set FILELIST=
for %%i in (*) do set FILELIST=%FILELIST%%%i;
echo %FILELIST%
上記のバッチファイルは失敗します。for 文における %FILELIST% の展開が、
for文を開始するときに行われるために、最後のファイル名しか追加されません。

結果

C:\>filelist
ntuser.dat;

これを回避するために ! で囲んだ遅延環境変数の展開を使います。
! で囲まれた環境変数は、使われる直前で展開が行われます。
また、遅延環境変数機能を使うには、
・cmd /V:ON
・regをいじる
・setlocal ENABLEDELAYEDEXPANSION
の方法がありますが、最後の方法を使います。
これを使ってうまくいくバッチファイルは、

filelist.cmd

@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set FILELIST=
for %%i in (*) do set FILELIST=!FILELIST!%%i;
echo %FILELIST%

結果

C:\>filelist
autoexec.bat;BOOTSECT.BAK;cmdmemo.txt;config.sys;ntuser.dat;

あまり使い分けが面倒なので、これ以降基本的には遅延変数展開を使用します。

閉じる コメント(0)

コメント投稿
名前パスワードブログ
投稿

閉じる トラックバック(0)

トラックバックされた記事

トラックバックされている記事がありません。

トラックバック先の記事

  • トラックバック先の記事がありません。


.

過去の記事一覧

人気度

ヘルプ

Yahoo Image

  今日 全体
訪問者 2 6414
ブログリンク 0 0
コメント 0 31
トラックバック 0 23
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

標準グループ

登録されていません

開設日: 2008/2/3(日)

PR

carview愛車無料査定


プライバシーポリシー -  利用規約 -  ガイドライン -  順守事項 -  ヘルプ・お問い合わせ

Copyright (C) 2012 Yahoo Japan Corporation. All Rights Reserved.