Programming Field

DOS コマンド一覧

Set

環境変数の一覧の表示や、変数の値を変更します。

構文

set
set <var-name>=[<value>]
set /A <var-name>[=<expression>]
set /P <var-name>=[<prompt>]
(引数無し)
現在の環境に割り当てられている環境変数の一覧を表示します。
<var-name>
環境変数の名前を指定します。
<value>
環境変数に書き込む値を指定します。省略すると変数<var-name>が環境から削除されます。
[Windows NT系] [拡張構文] <value>内に環境変数を用いる際、特殊な展開方法を用いることができます。詳しくは「解説」をご覧ください。
/A <var-name>[=<expression>]
[Windows NT系] [拡張構文] <expression>を演算式として処理し、式の処理結果を変数<var-name>に設定します。コマンドプロンプト上で実行している場合はその値を画面に出力します。式内の数値が実際に計算に用いられ、数値以外の文字は環境変数名として、計算時に展開されます。指定できる記号(演算子)は「解説」をご覧ください。「=」文字とそれ以降を省略した場合は変数に対して何も処理を行いません(コマンドプロンプト上では出力のみ行います)。
/P <var-name>=[<prompt>]
[Windows NT系] [拡張構文] ユーザーからの入力を変数<var-name>に設定します。<prompt>を指定すると、それをユーザーに入力を促すプロンプトとして表示します(<prompt> は改行されず、カーソルはその直後の位置で入力待ちとなります)。「=」文字は省略できませんが<prompt>は省略することができます。

解説

「環境変数」は現在のプロンプト(Command.comCmd.exe)に登録されている「設定」の一つで、このプロンプト下で実行されるプログラムがこの値を利用します。

環境変数の値をバッチプログラムなどで利用する場合、変数名を「%」文字で挟むことで自動的にその変数の値に展開されます。

[MS-DOS, Windows 95/98/Me] 「環境変数のための領域が足りません」というメッセージが表示された場合、現在のプロンプトに割り当てられている環境変数用のメモリ領域が不足していることを表しています。このメモリ領域の設定は「Command」の「/E」スイッチをご覧ください。

代表的な環境変数には「Dircmd」(Dirコマンドの既定スイッチ)や「Copycmd」(CopyMoveXcopyの各コマンドの既定スイッチ)、「COMSPEC」「Prompt」「Path」などがあります。

環境変数について詳しくは「環境変数について」をご覧ください。

環境変数展開の拡張

[Windows NT系] [拡張構文] <value>内で環境変数を用いる場合に、特殊な構文を使うことで環境変数の展開方法を変更することができます。

「%」のページに移動しました。

/A スイッチで利用できる演算子

[Windows NT系] [拡張構文] /Aスイッチにおける、式で利用できる演算子は以下の通りです。なお、数値は符号付き32ビット整数で処理されます。また、以下で「A」や「B」は計算結果(数値または括弧でくくられた式)を表します。

優先度記号意味
8(A)括弧内に式を記述することでその式を優先的に処理します。
7!A[Not] Aが0なら1、それ以外なら0とします。
~A[ビット反転] Aに1を加えて符号を反転したものとします。
-A[符号反転]
6A * B[乗算]
A / B[除算]
A % B[剰余] AをBで割った余りを表します。
5A + B[加算]
A - B[減算]
4A << B[論理左シフト] Aに「2のB乗」を掛けます。
A >> B[論理右シフト] Aに「2のB乗」を割ります。
3A & B[論理積]
2A ^ B[排他的論理和]
1A | B[論理和]
0<var-name2> = B[代入] <var-name2>にBの結果を代入し、その値を計算結果とします。「=」の他に「+=」「-=」「*=」「/=」「%=」「&=」「|=」「^=」「<<=」「>>=」も利用できます。
-1A, B[式の区切り] AとBをそれぞれ計算し、Bの結果を計算結果とします。Bの結果のみが返りますがAも計算が行われ、例えばAに代入の式が含まれる場合は代入が実行されます。

サンプル 1
set MYVAR=

現在の環境に環境変数「MYVAR」が存在する場合、それを削除します。

サンプル 2
set PATH=D:\bin;%PATH%

「Path」環境変数の値の先頭に「D:\bin;」を追加します。

サンプル 3 [バッチファイル]
@echo off
setlocal
call :strlen "Test String"
echo %STRLEN_RET%
goto end

:strlen
set STRLEN_RET=0
set STRLEN_TEMP=%~1
:strlen_loop
if "%STRLEN_TEMP%"=="" exit /B 0
set /A STRLEN_RET="STRLEN_RET+1"
set STRLEN_TEMP=%STRLEN_TEMP:~1%
goto strlen_loop

:end

[Windows NT系] [拡張構文] 引数で指定された文字列の長さを返す「strlen」の処理をバッチファイルで記述した例で、処理結果を環境変数「STRLEN_RET」に設定しています。12行目で数値を増やし、13行目で変数「STRLEN_TEMP」の先頭1文字を削っています。なお、9行目ではバッチファイルに渡された引数からダブルクオーテーションマークを取り除くための拡張構文を用いています(「%」の説明も参照)。