COMSPEC環境変数 - DOS/コマンドプロンプト コマンド一覧
環境変数「COMSPEC」はコマンドインタープリター(Command.comやCmd.exe)のパスを持つ環境変数で、主にシステムによって使用されます。
>echo %COMSPEC% C:\WINDOWS\system32\cmd.exe
解説
COMSPECの値は、プロンプトを表示する既定のプログラムや、バッチファイルを起動する際のコマンド解析プログラムとして使用されます。そのため、COMSPECが指すプログラムは各種コマンドやバッチファイルを解析する処理を行える必要があります。
[MS-DOS, Windows 95/98] 原則としてConfig.sysの「Shell」文で指定されたインタープリターがこの環境変数を指定します。インタープリターがCommand.comの場合、Command.comの第1引数で指定されたパスに存在する「Command.com」への絶対パスがCOMSPECの値となります。この値は、プロンプト内でのプログラム起動時に一旦Command.comがアンロードされた際、再びプロンプトを表示させるためのCommand.comを検索するために使用されます。そのため、Command.comが読み込まれた状態でCOMSPECの値を不適切な値(Command.com以外を指すもの)にすると、何らかのプログラムを起動して終了した際に「COMMAND を読み込めません.システムは停止しました.」となり操作不能となってしまいます。(Config.sysの「Shell」文でCommand.comを指定する際に /P オプションを利用すれば、Command.comがアンロードされないようにすることができます。)
[Windows NT?/XP以降] Windowsインストール時に「%SystemRoot%\system32\cmd.exe」と設定されますが、変更も可能です。この値を変更することで、普段バッチファイルを実行する際にバッチファイルを独自のインタープリターに解釈させて実行させることができますが、多くの場合COMSPECはWindowsのバッチファイルを解釈できるプログラム(cmd.exe)を指しているものと想定されるため、COMSPECの値がcmd.exeでない場合バッチファイルなどが意図通りの動作をしない可能性がありますのでご注意ください。なお、COMSPECが存在しない場合はシステム設定値、それも存在しない場合は「%SystemRoot%\system32\cmd.exe」が使用されます。
※ Win32関数のCreateProcessにはバッチファイル(*.bat, *.cmd)を起動プログラムとして直接渡すことができます。CreateProcessはバッチファイルを実行する際に現在の環境におけるCOMSPEC環境変数の値を使用し、状況に応じて「/C」か「/K」のいずれかと、バッチファイル名および後続の引数を足してCOMSPECに指定されたプログラムを実行します(そのため、.batや.cmdのファイルタイプはレジストリ上の「open」のコマンドが「"%1" %*」となっています)。ただし「cmd.exe」内からバッチファイルが直接実行された場合は、そのCmd.exeがバッチファイルの解析を行います。
COMSPEC環境変数は下記サンプルにあるように、通常はコマンドインタープリターの場所を取得するために用いられます。バッチファイル内などでCOMSPECを書き換えることは通常行われません。
例
サンプル
%COMSPEC% /K setenv.bat
コマンドインタープリターを「/K setenv.bat」という引数で起動します。
COMSPECがCommand.comやCmd.exeである場合は、このコマンドは「setenv.bat バッチファイルを実行してそのままプロンプトを開始する」という処理になります。