2011年2月18日金曜日

SET = 環境変数を表示、設定、削除する。もしくは数値計算する - Windowsのコマンドプロンプト(bat,cmd)

Windowsコマンド。制御文と環境変数
○Windows XP
環境変数を表示、設定、削除します。また、数値計算する事も出来ます。

o バッチファイルの実行時に、画面から値を入力する事も出来ます。
o 数値計算出来るのは整数値。負の数も扱う事が出来ます。
    + 数字の先頭に 0x や 0 を付けると、16進数や 8進数になります。


**** 書式
--------
set [ 環境変数名[=設定したい値] ]
もしくは
set /p 環境変数名=[入力を促すメッセージ]
もしくは
set /a 計算式 [, 計算式]
--------

o コマンド名やキーワードは、大文字小文字のどちらでも大丈夫です。

(個別説明)
--------
set [ 環境変数名[=設定したい値] ]
--------

o 環境変数名 = 環境変数に設定したい名前、もしくは確認したい名前です。
    + 環境変数名だけ指定すると、その名前で始まる名前の環境変数を表示します。
        + (例。set miku は、環境変数 MIKUSAN などの値も表示します。)
    + 通常使うのは、半角英数字と「_」(アンダーライン)辺りです。
    + 全角文字も使用出来ました。
    + 使用出来なかったのは、「=」「<」「>」
o =設定したい値 = 間に空白を入れずに書きます。(例。set MIKUSAN=NEGI)
    + = だけ書くと、環境変数を削除します。(例。set MIKUSAN=)
--------
set /p 環境変数名=[入力を促すメッセージ]
--------

o /p = 環境変数に設定する値を、次の行で入力してもらう時に使います。
o 入力を促すメッセージ = 入力欄の左に表示する文字列です。
    + = prompt コマンドとは異なり、$ から始まる特殊記号を使う事は出来ません。
--------
set /a 計算式 [, 計算式]
--------

o /a = 数値計算する事が出来ます。
    + 計算結果を、環境変数に代入する事も出来ます。
    + 計算出来るのは、符号付き 32ビット整数の範囲。-2147483648 から 2147483647 までの間です。
    + 実数(= 小数点付きの数)や虚数は、扱う事が出来ません。
o 計算式 = 整数計算出来ます。
    + 計算式に使う事の出来る記号は、下記の表の通りです。
    + Windowsコマンドでも使う記号を入れる時は、両端を「"」で括ります。
        + 常に「"」で括っても、大丈夫です。
    + 環境変数は「%」無しで使う事が出来ます。環境変数への代入も出来ます。
        + 「%」で括らない場合、右辺の環境変数が存在しない時は、0 と解釈してくれます。
    + 計算式の途中に、空白を入れる事が出来ます。
    + 数値以外の値を指定すると、0 として計算します。
    + 数字部分の先頭に 0x や 0 を付けると、16進数や 8進数として計算します。
    + 小数点以下は扱っていません。入力するとエラーになります。
o , (カンマ) = 計算式は、カンマを付けて、複数並べる事が出来ます。
    + (以下、Windows XP Service Pack 3 (32ビット版)の場合の動作です。)
    + Windowsコマンドで 1度に書く事の出来る文字数は、全部半角文字の場合、8190文字です。
    + 1つの SET /A コマンドで、少なくとも 934個の環境変数への代入が出来ました。

SET /A の計算式で使用出来る演算子
記号意味補足説明
演算子
( と )括弧
+加算
-減算、もしくは負の符号
*乗算
/除算割った結果の整数部分を返します。
%余り
!否定a=0 の時 !a=1。aが0以外の時、!a=0
~1の補数 a=0 の時 ~a= -1記号はチルダ。Shiftキーを押しながら「0」キーの2つ右の「へ」
演算子その2。「"」が必須になるもの
<< と >>論理シフト"2<<1" = 4。"-2>>1" = -1。符号は変わりません。計算式全体を「"」で括ります。
&ビット演算の AND = 論理積"5&3" = 1。計算式全体を「"」で括ります。
|ビット演算の OR = 論理和"5|3" = 7。計算式全体を「"」で括ります。縦棒は、Shiftキーを押しながら、「0」キーの3つ右の「\」
^ビット演算の XOR = 排他的論理和"5^3" = 6。計算式全体を「"」で括ります。記号はハット。「0」キーの2つ右の「へ」
代入
=環境変数への代入
+=加算して代入A+=3 は、Aに3を加えます。
-=減算して代入A-=3 は、Aから3を減じます。
*=乗算して代入A*=3 は、Aに3を乗じます。
/=除算して代入A/=3 は、Aを3で割った整数部分を Aに代入します
%=除算した余りを代入A%=3 は、Aを3で割った余りを Aに代入します。
代入その2。「"」が必須になるもの
&=AND演算結果を代入"A&=3" は、A と 3 をAND演算した結果を Aに代入します。計算式全体を「"」で括ります。
|=OR 演算結果を代入"A|=3" は、A と 3 をOR演算した結果を Aに代入します。計算式全体を「"」で括ります。左の縦棒は、Shiftキーを押しながら、「0」キーの3つ右の「\」
^=XOR 演算結果を代入"A^=3" は、A と 3 をXOR演算した結果を Aに代入します。計算式全体を「"」で括ります。左の記号はハット。「0」キーの2つ右の「へ」
<<=左論理シフト結果を代入"A<<=3" は、A を 3つ左に論理シフトした結果を Aに代入します。計算式全体を「"」で括ります。
>>=右論理シフト結果を代入"A>>=3" は、A と 3つ右に論理シフトした結果を Aに代入します。計算式全体を「"」で括ります。
複数計算
,カンマ = 式の区切り記号A=3+9,B=3-9 は、環境変数 Aと Bに、それぞれの計算結果を代入します。


**** 戻り値 ( ERRORLEVELの値。確認分のみ )
o (設定なし) = 成功。この時は、ERRORLEVELの値を更新しません。
   + 次の時も、成功扱いになります。
      + オーバーフロー発生(= 符号が逆転した状態です。)
      + 環境変数の名前誤り
    + 「=% の使い方が誤っています。」 = 環境変数の書き方が間違ってます。
        + 詳しくは「環境変数の使い方。置換と部分文字列
o 1 = エラー。結果の表示不可
   + 「環境変数 MIKUSAN が定義されていません」 = 値を表示しようとしましたが、変数名が見つかりませんでした。
o 9167 = エラー。数値の後ろに文字
   + 「無効な数字です。数値定数は 10 進 (17 桁)、16 進 (0x11 桁)、または 8 進 (021 桁) です。」 = 数値の後ろに「数字や演算子」以外の文字が続いています。
o 9168 = エラー。オーバーフロー
   + 「無効な数字です。数値は 32 ビットで表記される数値です。」 = 計算できるのは、-2147483648 から 2147483647 までの間です。
o 9169 = エラー。0除算エラー
   + 「0 除算エラーです。」 = 割り算の時に、分母を0にしてはいけません。


**** 使用例
o MIKU から始まる名前の環境変数の有無を確認して
--------
set miku
--------


o 環境変数 MIKUSAN を設定します。削除する事も出来ます。
--------
set MIKUSAN=私は NEGI だよ

set MIKUSAN=
--------


o 計算結果を確認したり、環境変数 MIKUSAN に代入。
--------
set /a 3*9+3+9
set /a MIKUSAN=(3*9+3+9)*10+3

set /a MIKUSAN = 3 * 9 + 3 + 9
set /a MIKUSAN = MIKUSAN * 10 + 3
--------

    + 空白を入れて計算する事も出来ます。
    + 計算結果は、「39」「393」「39」「393」
    + 右辺の MIKUSAN は、%MIKUSAN% と書く事も出来ます。
    + でも、おすすめの書き方は MIKUSAN。変数 MIKUSAN が存在しない時、0 になります。

o 環境変数の値を、画面から入力してもらいます。
--------
set /p MIKUSAN=ミクさんに一言。
--------

o コマンド名やオプションや環境変数は、大文字小文字のどちらでも大丈夫です。
o 一番上の「set miku」は、MIKU から始まる名前の一覧表示です。


**** 機能
o 環境変数を表示、設定、削除します。
    + 環境変数の詳細は
    + 「環境変数の使い方。置換と部分文字列
    + 「環境変数の生存期間について
o 環境変数を設定する際に、数値計算する事も可能です。
    + 計算出来るのは、符号付き 32ビット整数の範囲。-2147483648 から 2147483647 までの間です。
    + (= Windows XP 32ビット版の場合)
    + 数字部分の先頭に 0x や 0 を付けると、16進数や 8進数として計算します。
    + 小数点以下は扱っていません。入力するとエラーになります。
    + オーバーフロー時の動作は「SET /A コマンドで数値計算出来る値の範囲(= 上限と下限)


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


==
関連ページ:
    ▼Windowsコマンド。制御文と環境変数▼ABC順
    ▼Windowsコマンド一覧▼ABC順
    ▼コマンドプロンプト画面
    ▼制作メモ
    > SETLOCAL = バッチファイルの中でローカル環境変数の使用を開始する
    ENDLOCAL = ローカル環境変数の使用を終了する
    PATH = 実行可能ファイルを検索する場所を表示、設定する
(2011年7月19日削除。使用例に混じっていた PATH コマンドの使用例を削除)
(2011年2月19日変更。/aの使用例は%無しの方が適切。誤字などを訂正)