怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - 環境変数の取得・設定

VBScript から環境変数を取得、または設定するには WshShell オブジェクトを使います。

環境変数の種類と有効範囲

環境変数には次の4つの種類があります。
それぞれ、設定値が有効になる範囲が異なります。

  • System
    端末単位の設定。その端末を使うすべてのユーザーで有効になる。
    環境変数設定ダイアログのシステム環境変数がこれにあたる。

  • User
    ユーザー単位の設定。ログオンしているユーザーでのみ有効になる。
    環境変数設定ダイアログのユーザー環境変数がこれにあたる。

  • Volatile
    セッション単位の設定。ログオンしているユーザーでのみ有効になる。ログオフすると設定値は元に戻る。

  • Process
    現在のプロセスでのみ有効になる。スクリプトが終了するなど、現在のプロセスが終わると設定値は元に戻る。
    実行中のスクリプトでのみ有効にしたいときは、これを使っておけば良いだろう。

Environment プロパティでの環境変数の取得と設定

WshShell オブジェクトの Environment プロパティを使って、環境変数の取得と設定ができます。

shell.Environment( Type )

引数の Type には環境変数の種類を指定します。

認識できない値を指定した場合、実行時エラーが発生します。
→ プロシージャの呼び出し、または引数が不正です。

Environment プロパティは環境変数のコレクションを返します。

コレクションに環境変数名を指定して、取得または設定します。

次のスクリプトは、現在のプロセスでのみ有効になる環境変数を取得および設定しています。

環境変数 TEMP の内容を出力します。

環境変数 PROCESS_ENV_VAR に現在日時を設定します。

Dim shell
Set shell = CreateObject("WScript.Shell")
'現在のプロセスでのみ有効になる環境変数のコレクションを取得
Dim env
Set env = shell.Environment("Process")
'環境変数 TEMP の内容を表示
WScript.Echo env("TEMP")
'環境変数 PROCESS_ENV_VAR に現在日時を設定
env("PROCESS_ENV_VAR") = Now
WScript.Echo env("PROCESS_ENV_VAR")

ExpandEnvironmentStrings メソッドでの環境変数の取得

WshShell オブジェクトの ExpandEnvironmentStrings メソッドでも、環境変数を取得できます。

こちらは有効範囲 Process の環境変数からの取得専用です。

shell.ExpandEnvironmentStrings( name )

引数には環境変数名を % で囲んだ値を指定します。

たとえば、環境変数名が TEMP の場合は %TEMP% とします。

次のスクリプト環境変数 TEMP の内容を表示します。

Dim shell
Set shell = CreateObject("WScript.Shell")
WScript.Echo shell.ExpandEnvironmentStrings("%TEMP%")
' → C:\Users\username\AppData\Local\Temp