COMMAND.COM

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

COMMAND.COM
COMMAND.COM in Windows 8
別名MS-DOS プロンプト
開発元シアトル・コンピュータ・プロダクツマイクロソフトIBM日本電気ノベルほか多数
初版1980年 (44年前) (1980)
プログラミング
言語
x86 assembly language[1]
対応OSDR-DOSFreeDOSMS-DOS、Novell-DOS、OpenDOS、PC-DOSPTS-DOS、ROM-DOS、86-DOSMicrosoft Windows (Windows 95 - 10) ほか多数
プラットフォームx86ほか多数
後継cmd.exe
種別シェル
テンプレートを表示

概要

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

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

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

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

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

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

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

動作モード

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

内部コマンド

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

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

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

バッチファイルコマンド

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

:label
GOTOコマンドの飛び先(ラベル)を定義する。
CALL
他のバッチファイルを起動し、その実行終了後、その後元のファイルに戻って実行を継続する。
FOR
繰り返し処理:一連の指定されたファイルのそれぞれに対してコマンドを実行する。
GOTO
指定したラベルに実行を移動する。ラベルは、行の先頭にコロンで指定される。
IF
条件分岐。条件によりプログラムの実行を分岐する。
PAUSE
プログラムの実行を停止し、続行するには任意のキーを押すようユーザに求めるメッセージを表示する。
REM
何もしないコマンド。このコマンドに渡された引数は全て無視される。リダイレクトなどは効果を持つため、コメントにするためにはクォートする必要がある。
SHIFT
バッチファイルの引数を参照するパラメータ(置換パラメータ)を後続のパラメータに置き換える(例: %0%1%1%2など)。

IFコマンド

全ての外部コマンドは、終了時に終了ステータス/エラーコード英語版として0〜255の値を呼び出し側プログラムに送信する。ほとんどのプログラムには、戻り値に特定の規則がある(実行に成功した場合は0など)[5][6][7][8]

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

変数

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は多くのシステム情報変数を使用できる[4][9][3]。この機能は、4DOS 3.00以降やMultiuser DOSでも使用できる[3]が、対応している変数名はほとんどが異なる。

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

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

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

制限

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

大衆文化において

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

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

関連項目

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

脚注

参考文献

  • Special Edition Using MS-DOS 6.22 (3 ed.). Que Publishing. (2001). ISBN 978-0-78972573-8 
  • MS-DOS Commands: Microsoft Quick Reference (4th revised ed.). Microsoft Press. (1990). ISBN 978-1-55615289-4 
  • Re: Random Lockups with DR-DOS 7.03”. FidoNet conference: ALT_DOS (2004年6月17日). 2019年4月28日時点のオリジナルよりアーカイブ。2019年4月28日閲覧。 “[…] all MS-DOS versions prior to Windows 95 […] used a COM style COMMAND.COM file which has a special signature at the start of the file […] queried by the MS-DOS BIOS before it loads the shell, but not by the DR-DOS BIOS […] COMMAND.COM would […] check that it is running on the "correct" DOS version, so if you would load their COMMAND.COM under DR-DOS, you would receive a "Bad version" error message and their COMMAND.COM would exit, so DR-DOS would […] display an error message "Bad or missing command interpreter" (if DR-DOS was trying to load the SHELL= command processor after having finished CONFIG.SYS processing). In this case, you could enter the path to a valid DR-DOS COMMAND.COM (C:\DRDOS\COMMAND.COM) and everything was fine. Now, things have changed since MS-DOS 7.0 […] COMMAND.COM has internally become an EXE style file, so there is no magic […] signature […] to check […] thus no way for DR-DOS to rule out an incompatible COMMAND.COM. Further, their COMMAND.COM no longer does any version checks, but […] does not work under DR-DOS […] just crashes […] the PC DOS COMMAND.COM works fine under DR-DOS […]” [6][7]
🔥 Top keywords: メインページ宮崎麗果特別:検索豊後水道松本忠久土居志央梨若葉竜也能登半島地震 (2024年)田中雄士長谷部誠井上道義The GazettE若林志穂服部百音黒木啓司REITA虎に翼平井理央出口夏希サーブ (盲導犬)三鷹事件セウォル号沈没事故白眞勲三淵嘉子高橋克也 (オウム真理教)ME:Iルーシー・ブラックマン事件佐藤ありさ杉咲花蜜谷浩弥水野真紀亀井亜紀子 (政治家)熊本地震 (2016年)水原一平井川意高中川安奈 (アナウンサー)内藤剛志いなば食品YOSHIKI