potappo's blog

日々の雑感などを書くブログ。

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 リファレンス))。