たきるブログ

C#やOracleなどの情報を書いています。

【WSH】WSHで環境変数を操作する

setx.exeが全く使い物にならない為、WSHによる実行が最適だという判断に至り、作成しました。

WindowsXPのsetx.exeを入手する方法

  1. Windows XP Service Pack 2 サポート ツールからWindowsXP-KB838079-SupportTools-ENU.exeをダウンロードする。(Windows正規品チェックが必要)
  2. WindowsXP-KB838079-SupportTools-ENU.exeを、WinRARなどの解凍ツールを使って解凍する。
  3. 解凍されたファイルにsuptools.msiというのがあるので、msiexecコマンドでsuptools.msiを解凍する。
    msiexec /a suptools.msi targetdir="C:\hoge" /qn
    ※targetdirは、解凍先ディレクトリを指定する。
  4. 解凍されたファイル群に、setx.exeがあるので、必要な場所へコピーする。
    恒久的に利用したい場合は、C:\Windows\System32など、環境変数PATHが通っている場所へ置く。

使い方

ユーザー環境変数を設定したい場合
setx 変数名 値
システム環境変数を設定したい場合
setx 変数名 値 -m

Windows7のsetx.exeとの違い

システム環境変数を指定するパラメータなどの指定方法が異なる。
WindowsXP用だと、ハイフンで指定するのに対し、Windows7用のだとスラッシュで指定する。
大文字/小文字も違う。
WindowsXP用 setx 変数名 値 -m
Windows7用  setx 変数名 値 /M

setx.exeが使い物にならない理由

  • 値が1024文字を超える環境変数を設定することができない。(超過分は切り捨てられる)
  • 値が「\」で終わると正しくコマンドが実行されない。(ユーザー環境変数におかしな値で設定される)
  • バッチで実行するが故に、環境変数名の値が全て展開される。
    例えば、元々PATHには%SYSTEMROOT%と登録されている状態で、setx PATH %PATH% -mとすると、設定される値はC:\Windowsになる。

WSHがいい理由

  • WindowsXPの場合、Windows7の場合と、切り分けて動作させる必要がない。
  • setx.exeでダメな部分が全て解消される。
  • わざわざバッチ処理だけにこだわらなくても動作する。(WindowsXP SP3, 7×86, 7×64で確認済み)



ということで、環境変数WSHで操作しましょう。
バッチから呼び出せば済む話です。
環境変数設定スクリプト