Windows TIPS
[System Environment]
setxで環境変数の値を設定する(基本編)
→ 解説をスキップして操作方法を読む
デジタルアドバンテージ 打越 浩幸
2008/03/28
対象OS
Windows XP
Windows Server 2003
Windows Vista
Windows Server 2008
■
システムのデフォルトの環境変数を設定しておくと、新しいプロセスが起動されるたびに、その環境変数が引き継がれる。
■
環境変数を設定するには、システムのプロパティを使うか、setxコマンドを使うとよい。
■
setxでの設定後は、新しくプロセスを起動しないと、その環境変数の値は反映されない。
バッチ・ファイルなどで環境変数の値を設定する場合、通常は「SET」という、コマンド・プロンプトの内部コマンドを利用する。だがこのSETコマンドで設定した変数の値は、そのコマンド・プロンプト内(およびそこから起動したプロセス)でのみ有効であり、別のプロセスやユーザーからは参照できないし、変更することもできない。
これに対し、システムのプロパティ([マイコンピュータ]を右クリックしてポップアップ・メニューから[プロパティ]を選択すると表示されるダイアログ)の[詳細設定]タブにある[環境変数]ボタンを使って「システム環境変数」の値を設定すると、システム全体のデフォルトの環境変数として利用できる。また「ユーザー環境変数」の値を設定すると、ユーザーごとに固有のデフォルト環境変数(ユーザーがログオンしたときに参照できる環境変数)として利用できる。これらで設定された環境変数の値は(例:PATHやTEMPなど)、ログオン後にコマンド・プロンプトを開いて、単にSETと入力すると表示され、確認できる。
TIPS「環境変数を変更する 」では、これらのデフォルトの環境変数を設定/変更する方法について解説した。だがいちいちGUIの画面を開いて設定するのでは、自動化も困難である。またTIPS「WSHで環境変数を設定する 」で紹介した方法もあるが、こちらはWSHが必要である。
だがsetx.exeというコマンドを利用すると、コマンド・プロンプト上から、setコマンドのように簡単にこれらの環境変数の値を設定/変更できる。本TIPSでは、setxの基本的な使い方について紹介する。
setxコマンドとは
setxコマンドは、Windows OSシステムの環境変数(システム環境変数とユーザー環境変数の2種類があるが、以下まとめて単に環境変数と呼ぶ)を設定するためのコマンドである。ユーザー・ログオン時にあらかじめ環境変数を設定しておくことにより、例えばバックアップや定型処理などにおいて、変数を使って処理の内容を切り替えたり、処理対象のファイルを変更したり、システムに依存するパラメータ(IPアドレスなど)をバッチ・コマンド中に静的に記述する必要をなくしたりできる。
さらにsetコマンドと違い、リモートのコンピュータの環境変数を設定したり、テキスト・ファイルやレジストリから文字列を読み出して、環境変数に設定するといった使い方もできる。
なおsetx.exeというコマンドは、Windows XPではサポート・ツールに含まれているので、まずサポート・ツールをインストールする必要がある(CD-ROMの\SupportフォルダにあるSUPTOOLS.MSIをインストールする)。Windows Server 2003やWindows Vista、Windows Server 2008の場合はシステムに標準で用意されているので、事前の作業は不要である。
setxコマンドの基本的な使い方
引数なしで「setx」を実行するか「setx -?(もしくはsetx /?)」とすると、ヘルプが表示される。Windows XPのsetxの場合は、「setx -i」とすると、より詳しい説明が表示される。
このコマンドは標準のsetコマンドの書式(「set 環境変数名 =値 」とする)と違い、次のように、=記号なしで環境変数名とその値を並べて使用する。この形式は、UNIXなどのsetenvコマンドの書式に近いと覚えておけばよいだろう。
上のコマンドを実行すると、指定されたユーザー環境変数に値がセットされる(空白などを含む値文字列の場合は、" " 記号で囲むこと)。システム環境変数をセットしたい場合は、次のように、末尾に「-m」オプションを付ける(先頭に付けると、-mが変数名とみなされるので注意すること)。
注意:値をすぐには参照することはできない
setxコマンドで設定した値は、システムのプロパティにある環境変数に反映される。だがここで設定された値は、新たにコマンド・プロンプトやプロセスを起動した場合にのみ反映されるので注意していただきたい。つまりコマンド・プロンプトを開いてsetxで環境変数を設定しても、そのコマンド・プロンプト内では、設定した値は参照できないのである(このあたりはUNIXのsetenvなどと異なる)。別に新しくコマンド・プロンプトを開いて、初めてその値が参照できる。コマンド・プロンプト内から子プロセスとしてcmdを起動しても、参照はできない。必ず、別プロセスとして起動しなければならない。
C:\>setx MYVAR "foo bar" …MYVARをセットしてみる
C:\>set myvar …変数MYVARを表示させてみる
環境変数 myvar が定義されていません …未定義。設定されていない
■新しく別に起動したコマンド・プロンプト上での操作
C:\>echo %myvar% …変数MYVARを表示させてみる
foo bar …結果。正しく参照できた
このような事情があるため、設定した値を利用する場合は注意が必要である。例えばsetxを含むバッチ・コマンドをログオン・スクリプトや[スタートアップ]メニューに登録したり、[タスク]で[ログオン時に実行]するように設定しておく。こうしておけば、ユーザーがログオンした後に起動されるコマンド・プロンプトやバッチ・ファイルでは環境変数が利用できる。
リモート・コンピュータの環境変数を設定する
ローカルのコンピュータではなく、リモート・コンピュータの環境変数を設定するには、「/s コンピュータ名 」および必要なら「/u ユーザー名 」「/p パスワード 」を指定する。ただしこの機能はWindows XP向けのsetxコマンドでは利用できない(ヘルプに/sオプションの説明がないsetxでは利用できない)。
C:\>setx /s mypc01 MYVAR "hello" -m …リモート・コンピュータのシステム環境変数を設定する
成功: 指定した値は保存されました。
環境変数の削除
setxコマンドで作成/設定した環境変数を削除するには、値として空文字列を指定して実行する。
C:\>setx MYVAR "" …ユーザー環境変数の場合
C:\>setx MYVAR "" -m …システム環境変数の場合
こうやって環境変数を設定しても、実際にシステムのプロパティで確認すると、値が空になるが、変数名そのものは残っている。値が空の環境変数は、プロセス(コマンド・プロンプトなど)には渡されないようなので、結果として、削除したのと同等になる。気になるようならば、システムのプロパティで環境変数の定義そのものも削除しておくとよいだろう。
レジストリからの値の取り出し
setxコマンドでは、レジストリから指定された値を取り出して、環境変数にセットする機能がある。このためには、「setx 環境変数名 -k レジストリ・キー 」とする。
C:\>setx buildnumber -k "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber"
Extracted value is: 2600 …「2600」が取り出した値
■
本TIPSでは、setxコマンドの基本的な使い方について解説した。テキスト・ファイルから文字列を取り出して設定する方法については、今後別TIPSで解説する予定である。
この記事と関連性の高い別のWindows TIPS
generated by
Windows Server Insider フォーラム 新着記事
スキルアップ/キャリアアップ(JOB@IT)