2005年10月23日

環境変数(他、%~dp0 等)

さて、今回は 「環境変数」 について話そう。

まず、環境変数とは何か・・・っていうと、
前にも出てきてるけど、%systemroot% とか %path% とか、
システムの動作に必要なものを定義した変数なんだ。

マイコンピュータ を右クリックで 「プロパティ」 を
ポイントしてみよう。そして 「詳細タブ」。
その画面にある 「環境変数ボタン」 を押下してください。

起動したウィンドウの中で見られるのが、システム起動時に
定義される環境変数だ。%systemroot%%path% も見つかるよね。
ここで新規に環境変数を作成すると、起動時に設定されるようになる。
編集、削除も可能だが、システムの動作に深く関わるので
充分な理解が出来るまでは、あまりお勧めできない。

バッチファイルを作成するにあたっては、特に必要ないとも言える。

set コマンドを使用して、局所的な変数を設定できるからだ。
ただし、ここにある変数と重ねると大変なことになる場合がある。

Windows 2000, XP での コマンドプロンプト では、
さほどの問題にならないようだが、MS-DOS プロンプト では
当方に既にその環境が無いために確認が出来ていない。

極端な例だが、 set path=

などとやってしまうと、再起動を余儀なくされることも予想されるので
重複を避けておいた方が無難である。


では、前回同様に、「+Lhaca でサブホルダ毎に一括圧縮」
ソースを例としてみてみよう。


set LHACA_PATH="C:¥Program Files¥Lhaca¥Lhaca.exe"
set TEMP_FILE=dircomp.$$$
set LOG_FILE_NAME=%~dp0SubDirLhaca.log
set IS_DIRECTORY=NULL



この4個の環境変数が使用されている。

LHACA_PATH  は、+Lhaca の実行ファイルの完全パス、
TEMP_FILE   は、サブホルダ一覧を保存する一時ファイル名、
LOG_FILE_NAME は、実行履歴を保存しておくファイル名、
IS_DIRECTORY は、与えられた引数がホルダか否かを
          判定するための変数

として使用されている。set コマンドは、
指定された変数名に値を代入するのに使用されている。

格納された値を呼び出すには、% で挟んでやれば良い。
%TEMP_FILE% とすれば、これをそのまま dircomp.$$$
置き換えてくれる。

変数の指定時には、% を付加してはならない。また、
代入される値は、= のすぐ右側から行末まで全てであり、
見やすいからと言ってスペースを空けたりすると、先頭にスペースを持った文字列になるので、気を付けなければならない。

もちろん、2重引用符もそのまま格納される。この場合、
"%LHACA_PATH%" とすると、2重引用符が2個連続する
事になる。見つけにくいバグになるので、
これにも充分気をつけたい。

LOG_FILE_NAME には、変数を使って値を設定している。
%~dp0 は、「%0 の引数をドライブとパス名に展開せよ」 という意味だ。
help for を実行すると、参照変数の置換について記されている。
いろいろ試してみると面白い。

そして、%~dp0 の実行結果の末尾が、¥ になることを
確認しておこう。そうすれば、%~dp0SubDirLhaca.log は、
%~dp0 の部分が展開された結果、完全パスに
なっていることが解かるだろう。


IS_DIRECTORY では、最初に NULL という値を格納している。
しかし、次の for 文でホルダか否かをチェックしている。

%1 に格納された文字列をホルダと仮定して、その親ホルダ内の
サブホルダを全てチェックし、一致するものが見つかったら
IS_DIRECTORY にそのときの変数名を代入している。

つまり、ホルダではなかった場合には、IS_DIRECTORY
NULL のままだ。そこで、次の文で条件分岐、
%IS_DIRECTORY%NULL と同じだったら
jump ラベルに飛べ」
と言う命令で処理をスキップしている。



っと、チョッと語調を変えて書いてみたけど、どうだろう?
どっちが読みやすいのかなぁ〜?

えっ? 一緒? どっちも解かんな〜〜い って??


うぅ〜〜、面目ない・・・


なんか、順番が滅茶苦茶になっているけど、
次回は、条件分岐、ループ処理 あたり、もうチョッと詳しく話そう。



応援ポチ  お願いしま〜す。

posted by Woody at 22:41 | 静岡 ☁ | Comment(1) | TrackBack(0) | コマンドプロンプト
この記事へのコメント
今日は!

%~dp0SubDirLhaca.logの展開は
『c:\Documents and Settings\Shiggy\dp0SubDirLhaca.log』
とはならないで、下記となります。
『c:\ and Settings\Shiggy\dp0SubDirLhaca.log』

注)バッチプログラムを『c:\』で実行時は、問題ありません

Q1:解決方法は?
Posted by 重松宏昌 at 2007年06月13日 12:01
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。