SET

 SETとはMS−DOSのシステムの内部コマンドで環境変数の一覧表示、新規登録、変更、削除が行えます。ウィンドウズのコマンドプロントでも同様の事が行えます。SETコマンドで環境変数の一覧、SET 環境変数=で削除、%環境変数%で環境変数を使用出来ます、設定した数値や文字列に置き換わります。ウインドウズのシステムで環境変数を設定するとコマンドプロントでも使用出来ますが、コマンドプロントで設定した環境変数はウィンドウズのシステムには反映されません。環境変数は親から子、子から孫のプログラムに引き継ぐ様に出来るが子の環境変数を変更しても、親のプログラムには反映されません。コマンドプロントはウィンドウズの子のプログラムで有るので有る。コマンドプロントは不思議なプログラムでも有る。ファイルサイズが小さい割には余りに高機能で有る。其の大部分はウインドウズのシステム其の物、カーネルを利用して居るので有ろう。SETはコマンドプロントの内部コマンドで有るから、コマンドプロント自体の一つの関数でも有る、一部で有るので有る。
 環境変数はコマンドプロントやバッチファイルで利用出来ます。勿論コマンドプロント用のプログラムでも利用も出来ます。エクスプローラのアドレスラインやスタートのファイル名を指定して実行でも一部使える、インターネットエクスプローラでもアドレスバーでも一部環境変数が使えるfail:///の場合はエクスプローラを起動し其のホルダー内を表示するのも不思議な話で有る。関数の中に環境変数の参照や設定が出来る様な物が有り、利用出来ます。プログラムにシステムの環境変数を継承させる事も出来ます。コマンドプロントではプログラムを起動する場合にコマンドのオプションを付けて起動する事が出来るし環境変数のポインターやポインター配列のポインターで引き継ぐ事が出来る。コマンドプロンプトのプログラムのオープションや環境変数の継承は素人には難しい物が有る。プログラムを起動する関数は特に注意が必要で有る、正しくオプションを継承為無いと起動し無い。
 プログラムの関数の中には環境変数の値を読み込んだり値を設定したり出来る物も有る。プログラムの中で設定した環境変数はプログラムの中丈が有効でコマンドプロントやシステムには反映され無い。
 %USERDOMEIN%はパソコンの名前で有る。%USERNAME%に本名を付けて居る人は注意が必要でも有る。HTMLのファイルの製作者の名前に%USERNAME%が利用されて居る場合が有る。インターネット上に本名が出てしまう可能性も有ります。便利さ故に危険も孕んで居る。%USERPROFILE%は各ユーザー専用のホルダーで有る。%TEMP%は作業用の一時ホルダーでも有る消されても良いファイルは%TEMP%に保存しましょう。%PATH%は特別な環境変数でも有る。コマンドプロントがコマンドラインに入力されたファイル名を%PATH%にしたがって検索して実行します。システムホルダーが必ず設定されて居る必要が有ります。市販のソフトをインストールすると自動的に%PATH%にソフトの保存先のPATHを設定するソフトも有る。設定の文字列の長さに制限が有り先頭から順に検索を行う為、重要な物、使用頻度の高い物を先に設定する必要有り。%PATHEXT%はコマンドプロント自体が起動出来る拡張子のリストで有る。.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH等で有る。インターネットエクスプローラでも利用出来るJavaScriptやVBscriptも利用出来る事は意味の有る事で有る。勿論バッチファイルも今だ健在で有る。コマンドラインでは漢字が何故か使えませんが、バッチファイルでは使えます。ウインドウズ自体はバージョンアップも進み可也進化が進んで居るがコマンドプロントは余り進化したとは思えません、来年の一月にはウィンドズの新バージョンVistaが発売されるがクラシックな機能も健在とか。コンピューターの原点の機能を再学習する事も重要用な事で有る。
 一台のパソコンに数台のハードディスクを組み込み、其の一つ一つにOSをインストールしディアルブートを構築して居る人に取って今起動して居るOSが何で有るかは重要な事で有る。プログラムにとってもで有る。%SystemDrive%や%SystemRoot%が何で有るかも大事な事で有る。起動中のシステムファイルは保護されて居るが他のシステムファイルは無防備でも有る。何やら可笑しな話でも有る。便利な予め環境変数に登録されて居るホルダーの多くがOSを再クリーンインストールをする場合に削除されてしまうので注意が必要か、プログラムも再度インストールをしないと関連付けが旨く行きません。
 C++言語の関数には環境変数を取り扱う関数も有る。getenv()関数は環境変数の値を取得します。_putenv()関数は環境変数を設定したり、上書き変更したり削除出来ます。_environ は環境変数のコピーのグローバル変数で有る。環境変数のパスを使ってファイルを検索する _seachenv()関数も有る。パスは%PATH%以外に自分で設定したパスも使える事が重要で有る。プログラムの中の関数で環境変数を設定、変更してもコマンドラインやウィンドウズのシステムには反映されません。プログラムの中だけのローカルな環境変数で有る。しかし子のプロセスには環境変数を継承させる事は可能。system()関数に環境変数が継承される事は重要な事で有る。自分好みのコマンドプロントを作れる事を意味する。しかし中にはCDコマンドの様にはシステムで変更出来ても。元に戻ってしまうので有る。_chdir()関数でカレントディレクトリは変更出来ます。コマンドラインでは一々ファイル名をキーボードから入力しなければ成らない、誠に不便でも有る。DIRコマンドで一覧は表示出来るので有るから、其れを利用してリストに番号を付けてっ番号で起動出来る様にすれば良いので有る。DIRコマンドの結果をファイルに一旦書き込み再度番号付きで読み出し、メモリに書き込み番号の入力でメモリ上のファイルをsystem()関数を使って実行させれば良いので有る。勿論_exclpe()関数や_spawnvpe()関数を使っても実行できますが。勿論漢字の入力の必要も有りません。素人でも作れるプログラムでも有るが。


















            2006−10−21−01−01−OSAKA


                     HOME
                  −−戻る 次へ++


 Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.

C:\>SET /?

cmd.exe 環境変数を表示、設定、または削除します。

SET [変数名=[文字列]]

  変数名  環境変数名を指定します。
  文字列  変数に割り当てる文字列を指定します。

現在の環境変数を表示するには、パラメータを指定せずに SET と入力してください。

コマンド拡張機能を有効にすると、SET は、次のように変更されます:

等号や値を指定せずに、変数名だけを指定して SET コマンドを実行すると、
SET コマンドに指定された名前に接頭辞が一致するすべての変数の値が
表示されます。たとえば、

    SET P

と入力すると、文字 'P' で始まるすべての変数が表示されます。

変数名が現在の環境に見つからない場合は、SET コマンドは、ERRORLEVEL を
1 に設定します。

SET コマンドでは、変数の名前に等符号を使用することはできません。

SET コマンドには、2 つの新しいスイッチが追加されています:

    SET /A 式
    SET /P 変数=[プロンプト文字列]

/A スイッチは、等号の右側の文字列が、評価すべき数式であることを
指定します。式の評価はごく単純で、次の操作がサポートされます。
操作は、優先順位の高い順に示されています:

    ()         - グループ化
    ! 〜 -        - 単項演算子
    * / %        - 算術演算子
    + -         - 算術演算子
    <<>>         - 論理シフト
    &          - ビット演算子 AND
    ^          - ビット演算子排他的 OR
    |          - ビット演算子 OR
    = *= /= %= += -=  - 代入
      &= ^= |= <<= >>=
    ,          - 式の区切り記号

論理演算子またはモジュール演算子を使う場合は、式文字列を引用符で
囲む必要があります。式内の数値以外の文字列は環境変数文字列として
処理され、使用される前に数値に変換されます。指定された環境変数名が
現在の環境で定義されていない場合は、値として 0 が使用されます。
これにより、いくつもの % 記号を入力して値を取得しないでも、環境
変数の値を算術演算に使うことができます。
コマンド スクリプト外でコマンド ラインから SET /A を実行すると、式の
最終的な値が表示されます。割り当て演算子を使うには、割り当て演算子
の左側に環境変数名が必要です。数値は 10 進数ですが、接頭辞として 0x
を付けると 16 進数、0 を付けると 8 進数になります。従って、0x12 は 18、
あるいは 022 と同じです。8 進表記を使う場合は、注意してください。08 や
09 は、8 と 9 が有効な 8 進数ではないため、有効な数値ではありません。


/P はユーザーによって入力された入力行を変数の値として設定できるようにします。
入力行を読み取る前に、指定されたプロンプト文字列を表示します。プロンプト文
字列は空でもかまいません。

環境変数の置換は、次のように拡張されます:

    %PATH:文字列1=文字列2%

は、PATH 環境変数を展開し、その結果に含まれるすべての "文字列1" を
"文字列2" に置き換えます。"文字列2" に空の文字列を指定すると、展開
された出力からすべての "文字列1" を削除することができます。"文字列1"
をアスタリスクで始め、展開された出力の先頭から、文字列1 の残りの部分
が最初に現れるまでのすべてを一致させることもできます。

また、展開の副文字列を指定することもできます。

    %PATH:〜10,5%

は、PATH 環境変数を展開し、展開結果の 11 番目 (オフセット 10) の文字
から始まる 5 文字だけを使います。長さが指定されなかった場合は、変数の
値の残りの長さを既定値とします。オフセットまたは長さのどちらかが負の値
の場合、環境変数の値の長さに指定されたオフセットまたは長さを足してその
数を使います。

    %PATH:〜-10%

は、パス変数の最後の10 文字が展開されます。

    %PATH:〜0,-2%

は最後の 2 文字以外のすべてが展開されます。

最後に、遅延環境変数の展開が追加されました。このサポートは常に既定で
無効になっていますが、CMD.EXE の /V: のコマンド ライン スイッチを使
って有効または無効にできます。CMD /? を参照してください。

遅延環境変数の展開は、実行時ではなく、テキスト行を読み取るときに展開
されるという現在の制限を避けるために役立ちます。
次の例は即時変数展開の問題を説明しています。

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after;
        if "%VAR%" == "after" @echo If you see this, it worked
    )

この例は、論理的には IF 文が別の IF 文の本体に含まれる複合文なので、
両方の IF 文の %VAR% が、最初の IF 文を読み取ったときに展開されます。
このため、メッセージは決して表示されません。複合文の中の IF では "before"
と "after" が比較され、決して等しくはなりません。同様に次の例も期待し
たようには動作しません。

    set LIST=
    for %i in (*) do set LIST=%LIST% %i
    echo %LIST%

この例では、現在のディレクトリのファイルの一覧は作成されず、代わりに最後
に見つけられたファイルが LIST 変数に設定されます。これは %LIST% が FOR 文
が読み取られるとき、一度だけ展開され、そのときは LIST 変数は、空だからです。
つまり、実際に実行されている FOR ループは

    for %i in (*) do set LIST= %i

で、LIST に最後にみつけられたファイルを設定し続けているだけです。

遅延環境変数の展開では、実行時に環境変数を展開するために異なった文字
(感嘆符)を使うことができます。遅延環境変数の展開が有効な場合、上記の
例は次のように書くと意図したように動作します。

    set VAR=before
    if "%VAR%" == "before" (
        set VAR=after
        if "!VAR!" == "after" @echo If you see this, it worked
    )

    set LIST=
    for %i in (*) do set LIST=!LIST! %i
    echo %LIST%

コマンド拡張機能が有効な場合、SET によって表示される変数の一覧には
現れないいくつかの動的な環境変数があります。これらの変数の値は、変数の
値が展開されるときに動的に計算されます。ユーザーがこれらの名前の変数を
明示的に定義する場合、その定義は下記の動的な定義を無効にします。

%CD% - 現在のディレクトリ文字列に展開します。

%DATE% - DATE コマンドと同じフォーマットで現在の日付に展開します。

%TIME% - TIME コマンドと同じフォーマットで現在の時刻に展開します。

%RANDOM% - 0 から 32767 の間の任意の 10 進数に展開します

%ERRORLEVEL% - 現在の ERRORLEVEL の値に展開します。

%CMDEXTVERSION% - 現在のコマンド プロセッサ拡張機能のバージョン番号に
                     展開します。

%CMDCMDLINE% - コマンド プロセッサを起動したオリジナル コマンドライン
                 に展開します。

C:\>SET

ALLUSERSPROFILE=D:\Documents and Settings\All Users.XP64
APPDATA=D:\Documents and Settings\nakai_ke.XEON\Application Data
CLASSPATH=.;D:\Program Files (x86)\QuickTime\QTSystem\QTJava.zip
CLIENTNAME=Console
CommonProgramFiles=D:\Program Files\Common Files
CommonProgramFiles(x86)=D:\Program Files (x86)\Common Files
COMPUTERNAME=XEON
ComSpec=D:\XP64\system32\cmd.exe
FP_NO_HOST_CHECK=NO
HOMEDRIVE=D:
HOMEPATH=\Documents and Settings\nakai_ke.XEON
LOGONSERVER=\\XEON
nasubi=http://www.d1.dion.ne.jp/〜nakai_ke/
NUMBER_OF_PROCESSORS=4
OS=Windows_NT
Path=D:\XP64\system32;D:\XP64;D:\XP64\System32\Wbem;D:\PROGRA〜2\OASYS2〜1\PBIN;D:\Program Files (x86)\OASYS2002\PBIN;D:\Program Files (x86)\QuickTime\QTSystem\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=EM64T Family 15 Model 3 Stepping 4, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0304
ProgramFiles=D:\Program Files
ProgramFiles(x86)=D:\Program Files (x86)
PROMPT=$P$G
QTJAVA=D:\Program Files (x86)\QuickTime\QTSystem\QTJava.zip
SESSIONNAME=Console
SystemDrive=D:
SystemRoot=D:\XP64
TEMP=D:\DOCUME〜1\NAKAI_〜1.XEO\LOCALS〜1\Temp
TMP=D:\DOCUME〜1\NAKAI_〜1.XEO\LOCALS〜1\Temp
USERDOMAIN=XEON
USERNAME=nakai_ke
USERPROFILE=D:\Documents and Settings\nakai_ke.XEON
windir=D:\XP64

C:\>EXIT