こけめも

メモみたいなもの

WSH(VBScript, JScript)で、環境変数を含むパスを展開する方法

WSHでの環境変数の展開方法について勘違いをしていたので、忘備録のため記載。



環境変数とは

環境変数(かんきょうへんすう)はOSが提供するデータ共有機能の一つ。OS上で動作するタスク(プロセス)がデータを共有するための仕組みである。

http://ja.wikipedia.org/wiki/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0

「システムのプロパティ」⇒「詳細設定」⇒「環境変数(N)」で表示されるアレです。
コマンドプロンプトから "set" (ダブルクォーテーションは不要)コマンドを入力しても、一覧を確かめることが出来ます。


個人的な解釈としては、システムで使う文字列を格納していると思っています。
良く使うのは、Path変数にexeのパスを追加して、exe名だけでコマンド実行出来るようにしたり。
後は、バッチ(.bat)でデータ格納するのにも使われたりしますね。

代表的な環境変数
環境変数 展開後データ例 説明
%ProgramFiles% C:\Program Files プログラムファイル
%USERPROFILE% C:\Documents and Settings\User 現在ログインしているユーザーのプロファイルフォルダ
%USERNAME% User 現在ログインしているユーザー名

環境変数を含んだパスの展開方法

WSHでは、ShellオブジェクトのExpandEnvironmentStringsメソッドを使用することで、環境変数の展開が出来ます。
下記Microsoftのサイトで、VBScriptJScript両方のサンプルあり。

ExpandEnvironmentStrings メソッド


ところで、パスには時折環境変数を含んだものがあります。

%ProgramFiles%\Common Files -> C:\Program Files\Common Files

こうしたパスを展開したい場合、以前は環境変数を展開した後でその他部分と結合するものだと思ってましたが…

ExpandEnvironmentStrings("%ProgramFiles%") + \Common Files -> C:\Program Files\Common Files


実はExpandEnvironmentStringsは環境変数以外の部分はそのまま返してくれるんで、環境変数を含むパスをそのまま渡して問題ないんですね。
つまりはこういうことです。

ExpandEnvironmentStrings("%ProgramFiles%\Common Files") -> C:\Program Files\Common Files


当然、環境変数を含まないパスを渡した場合はそのまま返ってきます。

ExpandEnvironmentStrings("C:\Program Files\Common Files") -> C:\Program Files\Common Files

そういう意味では、環境変数を含んでいるかどうか分からない場合も、パスはとりあえずExpandEnvironmentStringsを通しておくといいのかも知れません。
知ってる人には当たり前なんだと思いますが、同じ勘違いをしている人がいたら参考にしてください。