COMMAND.COM

COMMAND.COMは、MS-DOS/PC DOS及び互換DOS、およびWindows 95、Windows 98、Windows 98SE、Windows Meにおける標準のコマンドラインインタプリタである。

1. 概要
-----

DOSにおいては、デフォルトのユーザインターフェイスである。MS-DOSでは、起動プロセスの中で MSDOS.SYSが CONFIG.SYS の記述「SHELL=」を元に起動する最初のプロセスであり、AUTOEXEC.BATを実行してシステムをセットアップした後、全てのプロセスの祖先となる役割がある。

en系では「DOSプロンプト」という名前でMS-DOS互換環境のシェルとして起動された。COMMAND.COM は16bitアプリであるが、そこから32ビット en アプリケーションの起動もできた。OS/2とWindows NT系ではcmd.exeにその役割を譲ったが、32ビット版のWindows NTでは互換性のためにCOMMAND.COMも付属しており、IA-32の仮想DOSマシンで利用可能である。64ビット版では16ビットアプリのサポートを終えたため削除された。

最も初期のCOMMAND.COMはわずか4KBほどであった。

COMMAND.COM}}というファイル名は、旧東ドイツのロボトロンによるMS-DOSの派生物であるDisk Control Programでも使用されていた。

FreeDOSにおける互換性のあるコマンドプロセッサは、FreeComと呼ばれる。

COMMAND.COMはDOSプログラムである。COMMAND.COMから起動されたプログラムは、DOS APIを使用してディスクオペレーティングシステムと通信するDOSプログラムである。

UNIXのシェル sh}} の .}}コマンドのようにカレントプロセスで実行されるため環境変数の変更などが可能である。またMS-DOS 5でCALL}}という内部コマンドが実装される以前は、バッチ中から別のバッチを実行すると戻る方法が基本的にはなく、COMMAND.COMを明示的に再帰的に起動して、そのCOMMAND.COMに子バッチを実行させる必要があった。

2. 動作モード
--------

シェルとして、COMMAND.COMには2つの異なる動作モードがある。1つ目は対話モードで、ユーザがコマンドを入力すると即時に実行される。2番目はバッチモードで、バッチファイルと呼ばれる拡張子 .BAT}} のファイルに書かれたコマンドを順次実行する。

3. 内部コマンド
---------

内部コマンドとは、COMMAND.COMのバイナリ内に組み込まれているコマンドである。従って、内部コマンドは常に使用可能であるが、コマンドインタープリタから直接実行することしかできない。

行の最後にEnter}}キーを押すと、その行の全てのコマンドが実行される。COMMAND.COMは大文字と小文字を区別しない。すなわち、コマンドは大文字と小文字を混在させて入力することができる。

BREAK: CtrlやCtrlを押下したときのプログラムの中断の処理を制御する。 CHCP: 現在のシステムのコードページを変更または表示する。 CHDIR, CD: カレントディレクトリを変更または表示する。 CLS: 画面の表示内容を消去する。 COPY : ファイルをコピーする。 CTTY: 入出力に使用するデバイスを定義する。 DATE: システム時刻の日付のみを表示または設定する。 DEL : ファイルを削除する。ディレクトリに対して使用すると、ディレクトリ内のファイルのみを削除する。 DIR: 特定のディレクトリの中にあるファイルの一覧を表示する。 ECHO: テキストを表示するか表示しないかを切り替える。また、指定されたテキストを画面に表示する。 EXIT: COMMAND.COMを終了し、それを起動したプログラムに戻る。 LFNFOR: FORコマンドによる長いファイル名の返送を有効または無効にする。 LOADHIGH: プログラムを上位メモリ領域にロードする。 LOCK: 外部プログラムが低レベルのディスクアクセスを実行できるようにする。 MKDIR, MD: 新しいディレクトリを作成する。 PATH: 環境変数 PATH}} を変更または表示する。この環境変数は、COMMAND.COMが実行可能ファイルを検索する場所を制御する。 PROMPT: 環境変数 PROMPT}} を変更または表示する。この環境変数は、コマンドプロンプトの見た目を設定する。 ren : ファイルやディレクトリの名前を変更する。 RMDIR, RD: 空のディレクトリを削除する。 SET: 環境変数を設定する。引数がない場合は、定義されている全ての環境変数を表示する。 TIME : システム時刻の時刻のみを表示または設定する。 TRUENAME: ファイルの完全に展開された物理名を表示し、ASSIGN、JOIN、SUBST論理ファイルシステムマッピングを解決する。 TYPE : ファイルの内容を画面に表示する。 UNLOCK: 低レベルのディスクアクセスを実行不可にする。 ver :
OSのバージョンを表示する。 VERIFY: ファイルの書き込みの検証を有効または無効にする。 vol : ストレージのボリューム に関する情報を表示する。

4. バッチファイルコマンド
--------------

制御構造は主にバッチファイル内で使用されるが、対話モードで使用することもできる。

//label//: GOTOコマンドの飛び先を定義する。 CALL: 他のバッチファイルを起動し、その実行終了後、その後元のファイルに戻って実行を継続する。 FOR: 繰り返し処理：一連の指定されたファイルのそれぞれに対してコマンドを実行する。 GOTO: 指定したラベルに実行を移動する。ラベルは、行の先頭にコロンで指定される。 IF: 条件分岐。条件によりプログラムの実行を分岐する。 PAUSE: プログラムの実行を停止し、続行するには任意のキーを押すようユーザに求めるメッセージを表示する。 REM: コメント: このコマンドの後に書かれたテキストは全て無視される。 SHIFT: バッチファイルの引数を参照するパラメータを後続のパラメータに置き換える。

5. IFコマンド
---------

全ての外部コマンドは、終了時に終了ステータス/エラーコードとして0〜255の値を呼び出し側プログラムに送信する。ほとんどのプログラムには、戻り値に特定の規則がある。

COMMAND.COMから外部プログラムを呼び出した場合、IFコマンドで環境変数ERRORLEVELを参照することで、最後に呼び出した外部プログラムのエラー状態をテストできる。

6. 変数
-----

COMMAND.COMのバッチファイルでは、以下の4種類の変数を使用することができる。

環境変数: %VARIABLE%の形式であり、SET文で値を設定する。
置換パラメータ: %0}}, %1}}...%9}}の形式で、コマンド名と最初の9つのコマンドライン引数がスクリプトに渡される。例えば、呼び出しコマンドが"myscript.bat John Doe}}"の場合、%0}}は"myscript.bat"、%1}}は"John"、%2}}は"Doe"である。10番目以降の引数は、SHIFT文を使用して参照範囲をずらすことで参照できる。
ループ変数: ループ内で使用され、バッチファイルで実行される場合、%%a}}の形式になる。この変数は、特定のFOR文の中でのみ定義され、そのFOR文で定義された特定の値の回数だけ反復処理する。
Novell DOS 7、OpenDOS 7.01、DR-DOS 7.02以降では、COMMAND.COMは多くのシステム情報変数を使用できる。この機能は、4DOS 3.00以降やMultiuser DOSでも使用できるが、対応している変数名はほとんどが異なる。

7. リダイレクト、パイプ、チェーン
------------------

DOSはシングルタスクのOSであるため、パイプライン処理は、コマンドを連続して実行し、一時ファイルに結果をリダイレクトしたり、一時ファイルから入力をリダイレクトしたりすることで実現している。ただし標準エラー出力のリダイレクトはCOMMAND.COMには実装されていない。

//command// < //filename// : 標準入力をファイルからリダイレクトする。 //command// > //filename// : 標準出力をファイルにリダイレクトする。ファイルが存在する場合は上書きする。 //command// >> //filename// : 標準出力をファイルにリダイレクトする。ファイルが存在する場合は追記する。 //command1// | //command2// : //command1//の標準出力から//command2//の標準入力にパイプする。 //command1// ¶ //command2// :ASCIIコード20で区切られたコマンドを順番に実行する。つまり、最初の//command1//が終了まで実行され、次に//command2//が実行される。これは、 MS-DOS/PC DOS 5.0以降のCOMMAND.COMに実装されている、文書化されていない機能である。また、Windows NT系のCOMMAND.COMやDR-DOS 7.07でも対応している。全てのバージョンのDR-DOSのCOMMAND.COMでは、代わりに感嘆符を使用する同様の内部機能が既に実装されていた。ただし、シングルユーザーの行では、この機能は内部やDOSKEYの$Tパラメータを介して間接的にのみ利用可能だった。4DOSは、変更可能なコマンドラインセパレータに対応しており、デフォルトでは"^"だった。Windows NTの新しいバージョンのCOMMAND.COMは、OS/2やWindows NT系のcmd構文との互換性のために&区切り文字にも対応している。

8. 制限
-----

対話モードにおいて、コマンドラインの文字数は126文字以内に制限されている。

9. 大衆文化において
-----------

ターミネーターシリーズに登場するアンドロイドT-800のヘッドアップディスプレイや、ロボコップの再起動時の内部ビューポートには、"Loading COMMAND.COM"というメッセージが表示される。

カナダのアニメーション『リブート』は、コンピュータの中を舞台としており、システムのリーダーは"COMMAND.COM"と呼ばれる。

10. 関連項目
--------

IBMBIO.COM / IO.SYS - コマンドプロセッサを最初のプロセスとして起動する。
CONFIG.SYS - SHELLコマンドで起動するシェルを変更することができる。デフォルトではCOMMAND.COMになる。
4DOS / NDOS - COMMAND.COMの代替として開発されたサードパーティ製のコマンドラインインタプリタ
MS-DOS Shell / ViewMAX - 代替のDOSシェル
コンカレントCP/M /

11. 脚注
------

12. 参考文献
--------

title=Re: Random Lockups with DR-DOS 7.03 [1][2]