S-JIS[2003-06-16/2012-07-18] 変更履歴

Windows環境変数


設定方法

MS-DOSプロンプト
コマンドプロンプト
set 名前= が無いと、その名前の環境変数は削除される。
sysedit スタート→ファイル名を指定して実行⇒syseditを入力→autoexec.batを編集 Windows95、Windows98
Windows2000 スタート→設定→コントロールパネル⇒システム⇒詳細→環境変数  
WindowsXP スタート→設定→コントロールパネル⇒システム⇒詳細設定→環境変数  
Windows7 スタート→コントロールパネル⇒「システムとセキュリティ」→「システム」→「システムの詳細設定」⇒詳細設定→環境変数 [2011-09-24]
スタート→コントロールパネル⇒右上の「コントロールパネルの検索」に「環境変数」を入力→「環境変数を編集」あるいは「システム環境変数の編集」

環境変数名は、大文字小文字は無視されるので どちらで書いてもよい。
環境変数名の値には当然スペースを入れることが出来る。

環境変数名にもスペースを使うことは出来るのだが、変数名の先頭には使えない。(入れても削除される)
システムの詳細設定から設定した場合は、変数名の末尾にスペースを入れても削除される。


バッチ(MS-DOS・コマンドプロンプト)での使用方法

Windowsで設定している環境変数は、コマンドプロンプト内でも使える。[/2006-07-07]
が、コマンドプロンプト上で環境変数を変更しても そのコマンドプロンプト内で有効なだけであり、Windowsの他のアプリには影響を与えない。

設定

set 名前=

値に指定された文字列が、環境変数にセットされる。
代入を表す「=」の前後にスペースを入れると、そのスペースも環境変数名の一部、あるいは値の一部として扱われる。

>set abc=hoge
>set abc = hoge

>echo "%abc%"
"hoge"
>echo "%ABC%"		←大文字小文字は無関係
"hoge"
>echo "%abc %"		←スペース付きの環境変数
" hoge"

set /a 名前=計算式

「/a」オプションを付けると、値に計算式を指定することが出来る。環境変数には、計算された結果がセットされる。
オプションなしの場合はセットしても何も表示されないが、こちらの場合はセットされると共に結果が表示される。

>set /a test=1+2
3
>echo %test%
3
>set /a test=3 + 4		…スペースを入れてもOK
7
>set /a test= %test% * 2	…環境変数も使用可能
14
>set /a test=test + test2	…式以外は変数として扱われるので、実は環境変数も%でくくる必要がない。また、存在しない場合は0扱い
14
>set /a test="test * 2"	…ダブルクォーテーションでくくってもOK
28
>set /a test+=2		…C言語系の演算子も使える
30

set /p 名前=プロンプト

「/p」オプションを付けると、画面にプロンプトを表示し、値を入力することが出来る。入力した値が環境変数にセットされる。

>set /p test=値を入力して下さい:
値を入力して下さい:abc
>echo %test%
abc

>set /p test=
zzz
>echo %test%
zzz

追加

set 名前=%名前%

既存の値の直後に新しい値を書くことで、環境変数に値を追加できる。

>set CLASSPATH=%CLASSPATH%;C:\temp		←ディレクトリを追加する時は、たいていセミコロンで区切る

削除

set 名前=

値を書かないと、環境変数が削除される。if文のdefinedが偽になる。

一覧表示

set

現在セットされている環境変数を全て表示する。

set 名前の一部

文字列を指定すると、その文字列で始まる環境変数を全て表示する。

>set bbb=hoge
>set bcd=hage
>set b
bbb=hoge
bcd=hage

表示・使用例

>echo %名前%
>cd %名前%\bin

つまり、名前を%で囲むとに置換される。(UNIXでは、「$」から始めた名前となる)

文法 説明
%変数名% 環境変数の値そのもの。  
%変数名:置換前=置換後% 環境変数の値の中で、置換前の文字列にマッチする部分を全て置換後の文字列に置き換える。
>set var=aaa.txt bbb.txt
>echo %var:txt=bat%
aaa.bat bbb.bat
%変数名:~位置,長さ% 環境変数の値の一部(副文字列)。
位置は0から始まる。また、全角文字も1文字として扱われる。
%変数名:~0,3% 左3文字
%変数名:~-3% 右3文字
%変数名:~2,1% 3文字目から1文字
%変数名:~2% 3文字目以降全て
!変数名! 環境変数の値そのもの。(遅延環境変数を有効にした(コマンドプロンプトの起動時に「/v:on」を指定した)場合のみ使用可能)  

forの変数の加工方法


特殊な環境変数

環境変数 概要 詳細 UNIX相当
%PATH% 実行コマンドが存在するディレクトリ群を保持している。
コマンドが実行される時は、ここで指定されているディレクトリにコマンドファイルを探しに行く。
PATHの設定方法
path /? $PATH
$LD_LIBRARY_PATH
%CD% カレントディレクトリ set /? $PWD
%DATE% 現在日付。dateコマンド相当。
日付の加工例
set /? $(date +%Y/%m/%d)
%TIME% 現在時刻。timeコマンド相当。(cs(センチ秒)(=1/100秒)まで表示する)
時刻の加工例
set /? $(date +%H/%M/%S)
%RANDOM% 乱数(0〜32767) set /?  
%ERRORLEVEL% コマンドの終了コード(エラーコード)。
if文にはこれを判断する演算子が用意されている。
set /? $?
%CMDCMDLINE% コマンドプロンプト起動時のコマンドラインの内容。拡張機能の確認に使える。 set /?  
%PATHEXT% 拡張子を省略して実行できるファイルの種類を指定する。→ [2007-08-25] ftype /?  
%OS% OS名。WindowsXPだと「Windows_NT」になる。[2010-05-09]    
%USERNAME% ログオンしているユーザーID。[2007-08-25]   $USER
%COMPUTERNAME% マシンのコンピューター名。[2007-08-25]    
%HOMEDRIVE%
%HOMEPATH%
%USERPROFILE%
ユーザーのホームドライブ&ディレクトリー。[2008-07-31]
HOMEDRIVEが「C:」でHOMEPATHが「\Users\hishidama」の場合、
USERPROFILEは「C:\Users\hishidama」。[2012-02-25]
  $HOME
%TEMP%
%TMP%
テンポラリー(一時的な作業場所)ディレクトリー。[2010-01-10]
TEMPもTMPも同じ値が入っている。
   

システムが変更する環境変数は、自分で同じ名称の環境変数として値をセットすることは出来るが、本来の意味での使用ができなくなる。
例えば%ERRORLEVEL%に値を入れてしまうと、コマンドの戻り値がセットされなくなる。
その場合、ERRORLEVELを削除してやると、元の使い方ができるようになる。


PATH

PATHだけは、setを使う他に 特別な設定方法(pathコマンド)が用意されている。

>PATH=		←実行パスの指定
>PATH 		←実行パスの指定(=が無くてもよい)
>PATH=%PATH%;	←実行パスの追加
>PATH		←実行パスの表示

日付・時刻を取得する例

環境変数DATEで日付を取得することが出来る。[2012-07-14]

> echo %DATE%
2012/07/14

環境変数の加工を使って、スラッシュ抜きにする例。

> echo %DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
20120714

同様に環境変数TIMEで時刻も取得できる。

> echo %TIME%
10:37:11.07

> echo %TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
103715
> set DATETIME=%DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2% %TIME:~0,8%
> echo %DATETIME%
2012-07-14 10:38:02

日付の「/」を取り除くだけなら、文字列の置換を使う(「/」を空文字に置換する)のが一番楽そう。[2012-07-18]

> echo %DATE:/=%
20120718

ちなみに、DOSにもdateコマンドやtimeコマンドがあって日付時刻を表示することが出来るが、UNIXのdateコマンドと違って書式を指定することは出来ない。

> date /t
2012/07/14

> time /t
10:41

dateコマンドの結果を加工する例


環境変数の確認方法

上述の設定方法で設定したパスを、コマンドプロンプトのsetで確認することが出来る。[2004-05-25]

このとき、例えば以下のように環境変数を定義していたら

環境変数 設定値
CLASSPATH %JAVA_HOME%\lib\tools.jar
JAVA_HOME c:\j2sdk1.4.0_01

setコマンドで見ると

>set CLASSPATH
CLASSPATH=c:\j2sdk1.4.0_01\lib\tools.jar

と表示されるはず。もし

CLASSPATH=%JAVA_HOME%\lib\tools.jar

と出ていたら、CLASSPATHに対してJAVA_HOMEが有効になっていない。
例えばCLASSPATHが「システム環境変数」で定義され、JAVA_HOMEが「ユーザー環境変数」で定義されていると このような状況になる。たぶん、環境変数は 先に「システム環境変数」が作られ、その後に「ユーザー環境変数」が作られるのだと思う。


技術メモへ戻る / UNIXの環境変数へ / プログラムから取得する方法
メールの送信先:ひしだま