2011年2月16日水曜日

環境変数の生存期間について - Windowsのコマンドプロンプト(bat,cmd)

Windowsコマンド。制御文と環境変数
環境変数は、CMD コマンド(コマンドプロンプト)を実行した時だけ有効な変数です。
最初から設定されているものもありますが、自由に変更する事が出来ます。

o 以下は、Windowsコマンド調査途中の内容です。他に情報を見つけましたら、このメモを更新します。


**** 環境変数の特徴
o 環境変数は、開いているコマンドプロンプト画面だけで有効な変数です。
    + SET コマンドで環境変数を変更しても、他のプログラムの環境変数は変わりません。
    + SET コマンドで環境変数を変更しても、他のコマンドプロンプト画面の環境変数は変わりません。
o コマンドプロンプト画面からプログラムを呼び出すと、その時点の環境変数の複製(= コピー)を、プログラムに渡します。
o バッチファイル内でSETLOCAL コマンドを実行すると、その時点の環境変数を保存する事が出来ます。


**** 環境変数が消える時期
o バッチファイル内で、SETLOCALコマンドを実行した後に設定した環境変数は、
    + そのSETLOCALコマンドに対応する ENDLOCALコマンドを発行した時
    + もしくは、そのSETLOCALコマンドを発行したバッチファイルを終了した時

# なお、バッチファイル A からバッチファイル B を呼び出した時は、少し複雑になります。
# CALL文でバッチファイル B を呼び出した時は、バッチファイル Bから戻ってくるまで有効です。
#     + CALL先で ENDLOCAL コマンドを発行しても、意味がありません。
# CALL文を使わずに直接バッチファイル B を呼び出した時は、バッチファイル A の延長とみなします。
#     + この時、バッチファイル B で ENDLOCAL コマンドを実行すると、環境変数の設定が消えます。
#

o CMD コマンド(やバッチファイル)の実行中に設定した環境変数は、
    + そのCMD コマンド(やバッチファイル)を終了する時

# 例えば、EXITコマンドで終了した時や、コマンドプロンプト画面を閉じた時です。
# 少し変わっているのが、バッチファイル A から CALL文を使わずにバッチファイル B を呼び出した時
# この時、バッチファイル Bは、バッチファイル A の延長とみなします。
#

o この他、コマンドプロンプト画面を終了した時にも、環境変数の設定内容は消えます。


**** 確認したバージョン
o Windows XP Service Pack 3


==
関連ページ:
    ▼Windowsコマンド。制御文と環境変数▼ABC順
    ▼Windowsコマンド一覧▼ABC順
    ▼コマンドプロンプト画面
    ▼制作メモ
    > SET /A コマンドで数値計算出来る値の範囲(= 上限と下限)
    IF = 条件に一致したら実行する
    ELSE = IFで実行しない時に実行する
    +
    SET = 環境変数を表示、設定、削除する。もしくは数値計算する