Windowsの環境変数設定メモその2
旧サブブログ「Life is Try and Error」(2013 年 3 月 31 日で閉鎖予定)の過去記事(2006-10-31 掲載)の再掲です。前エントリの続き。
WSHを使えば、一時的な環境変数だけではなく、恒久的な環境変数も設定することができる。Winodows XPの恒久的な環境変数には、ユーザー環境変数(ログインユーザに対してのみ有効)とシステム環境変数(全ログインユーザに対して有効)がある。以下は、新たなユーザ環境変数「TESTPATH=C:\test」を設定するWSHスクリプト「SetUserEnv.js」(使用言語はJScript)の例。
//SetUserEnv.js var WshShell = WScript.CreateObject("WScript.Shell"); var WshEnvironment=WshShell.Environment("User"); //\は特殊文字なのでエスケープするのを忘れない。 WshEnvironment.Item("TESTPATH") = "C:\\test";
注意すべきなのは、WSHスクリプトを実行したプロセス内のコマンドプロンプトでは、ユーザー環境変数は有効にならないということ。もう少し正確にいうと、コマンドプロンプトが環境変数を再読み込みしなければ、設定した環境変数は有効にならない。以下の例を試してみるとわかる。
C:\>cscript //nologo SetUserEnv.js C:\>echo %TESTPATH% %TESTPATH%
「ファイル名を指定して実行」などから、新たなプロセスのコマンドプロンプトを起動。
C:\>echo %TESTPATH% C:\test
よって、コマンドプロンプト内ですぐに環境変数を使用したい場合はsetコマンドを使う。次回起動時もその環境変数を利用したい場合にはWSHスクリプトが使える(前回の冒頭でも書いたように、GUIでも設定できる)。
すでにある環境変数に追加したい場合は、WshShell.ExpandEnvironmentStringsメソッドを用いる。以下はすでにあるユーザー環境変数TESTPATHの値にC:\test2を追加する例。
var WshShell = WScript.CreateObject("WScript.Shell"); //環境変数名を%で囲むのを忘れない。 var myenv_value = WshShell.ExpandEnvironmentStrings("%TESTPATH%"); myenv_value += ";C:\\test2"; var WshEnvironment=WshShell.Environment("User"); WshEnvironment.Item("TESTPATH") = myenv_value;
削除したいときは、Removeメソッドを使う。以下は、ユーザ環境変数TESTPATHを削除する例。
var WshShell = WScript.CreateObject("WScript.Shell"); var WshEnvironment=WshShell.Environment("User"); WshEnvironment.Remove("TESTPATH");
とりあえず、これだけあれば足りる(個人的には)が、WSHでは、User環境変数、System環境変数の他にProcess環境変数(現在のプロセスにのみ適用)とVolatile環境変数(現在のログオン中のみに適用)が設定可能。Volatile環境変数は設定できる環境変数が制限されるので注意(参照:Environment プロパティ(MSDN Library内のWindows Script Host リファレンス))。