COMMAND.COM

COMMAND.COM（コマンド・コム）は、MS-DOS/PC DOS及び互換DOS、およびWindows 95、Windows 98、Windows 98SE、Windows Meにおける標準のコマンドラインインタプリタ（コマンドシェル）である。 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/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（ドイツ語版）(DCP)でも使用されていた。 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+CやCtrl+⎊ 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（英語版）論理ファイルシステムマッピングを解決する。 TYPE（英語版） ファイルの内容を画面に表示する。 UNLOCK 低レベルのディスクアクセスを実行不可にする（DOS 7.1およびWindows 9xのみ）。 VER（英語版） OSのバージョンを表示する。 VERIFY ファイルの書き込みの検証を有効または無効にする。 VOL（英語版） ストレージのボリューム（英語版）に関する情報を表示する。 制御構造は主にバッチファイル内で使用されるが、対話モードで使用することもできる。 :label GOTOコマンドの飛び先（ラベル）を定義する。 CALL 他のバッチファイルを起動し、その実行終了後、その後元のファイルに戻って実行を継続する。 FOR 繰り返し処理：一連の指定されたファイルのそれぞれに対してコマンドを実行する。 GOTO 指定したラベルに実行を移動する。ラベルは、行の先頭にコロンで指定される。 IF 条件分岐。条件によりプログラムの実行を分岐する。 PAUSE プログラムの実行を停止し、続行するには任意のキーを押すようユーザに求めるメッセージを表示する。 REM 何もしないコマンド。このコマンドに渡された引数は全て無視される。リダイレクトなどは効果を持つため、コメントにするためにはクォートする必要がある。 SHIFT バッチファイルの引数を参照するパラメータ（置換パラメータ）を後続のパラメータに置き換える（例： %0を%1、%1を%2など）。 全ての外部コマンドは、終了時に終了ステータス/エラーコード（英語版）として0〜255の値を呼び出し側プログラムに送信する。ほとんどのプログラムには、戻り値に特定の規則がある（実行に成功した場合は0など）。 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は多くのシステム情報変数を使用できる。この機能は、4DOS 3.00以降やMultiuser DOSでも使用できるが、対応している変数名はほとんどが異なる。 DOSはシングルタスクのOSであるため、パイプライン処理は、コマンドを連続して実行し、一時ファイル（英語版）に結果をリダイレクトしたり、一時ファイルから入力をリダイレクトしたりすることで実現している。ただし標準エラー出力のリダイレクトはCOMMAND.COMには実装されていない。 command < filename 標準入力をファイル（またはデバイス）からリダイレクトする。 command > filename 標準出力をファイルにリダイレクトする。ファイルが存在する場合は上書きする。 command >> filename 標準出力をファイルにリダイレクトする。ファイルが存在する場合は追記する。 command1 | command2 command1の標準出力からcommand2の標準入力にパイプする。 command1 ¶ command2 ASCIIコード20（¶で示す。装置制御4、Ctrl+Tで入力できる）で区切られたコマンドを順番に実行する（コマンドのチェーン）。つまり、最初のcommand1が終了まで実行され、次にcommand2が実行される。これは、 MS-DOS/PC DOS 5.0以降のCOMMAND.COMに実装されている、文書化されていない機能である。また、Windows NT系のCOMMAND.COMやDR-DOS 7.07でも対応している。全てのバージョンのDR-DOSのCOMMAND.COMでは、代わりに感嘆符(!)を使用する同様の内部機能が既に実装されていた（Concurrent DOSやMultiuser DOSから派生した機能）。ただし、シングルユーザーの行では、この機能は内部（"!DATE!TIME"のような組み込みのスタートアップスクリプト）やDOSKEYの$Tパラメータを介して間接的にのみ利用可能だった。4DOSは、変更可能なコマンドラインセパレータに対応しており、デフォルトでは"^"だった。Windows NTの新しいバージョンのCOMMAND.COMは、OS/2やWindows NT系のcmd構文との互換性のために&区切り文字にも対応している（ただし、cmd.exeは¶セパレータに対応していない）。 対話モードにおいて、コマンドラインの文字数は126文字以内に制限されている。 ターミネーターシリーズに登場するアンドロイド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（英語版） ^ MS-DOS/COMMAND.ASM at master · microsoft/MS-DOS · GitHub ^ “Betriebssystem DCP” (ドイツ語). www.robotrontechnik.de (2016年11月29日). 2019年4月3日時点のオリジナルよりアーカイブ。2019年4月28日閲覧。 ^ a b c d e f g h (ドイツ語) NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds (3 ed.). (1997-07-30). オリジナルの2016-11-04時点におけるアーカイブ。. https://web.archive.org/web/20161104235829/http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm 2020年1月22日閲覧。  (NB. The provided link points to a HTML-converted version of the NWDOSTIP.TXT, which is part of the MPDOSTIP.ZIP collection.) [1] ^ a b “Chapter 7: Batch Processing”. Caldera DR-DOS 7.02 User Guide. Caldera, Inc.. (1998). オリジナルの2017-09-11時点におけるアーカイブ。. http://www.drdos.net/documentation/usergeng/07ugch7.htm 2017年9月11日閲覧。  ^ (ドイツ語) BATTIPs — Tips & Tricks zur Programmierung von Batchjobs. (1997-05-01). Kapitel 7: ERRORLEVEL abfragen. オリジナルの2017-08-23時点におけるアーカイブ。. https://web.archive.org/web/20170823191411/http://www.antonis.de/dos/batchtut/battips/index.htm 2017年8月23日閲覧。  (NB. BATTIPS.TXT is part of MPDOSTIP.ZIP. The provided link points to a HTML-converted older version of the BATTIPS.TXT file.) [2] ^ “MS-DOS errorlevels” (2015年12月24日). 2015年12月24日時点のオリジナルよりアーカイブ。2020年3月11日閲覧。 ^ “Exitcodes (errorlevels) of DOS utilities” (2003年). 2017年9月11日時点のオリジナルよりアーカイブ。2017年9月11日閲覧。 [3] ^ “Windows 95/98/ME ERRORLEVELs”. 2005年10月29日時点のオリジナルよりアーカイブ。2005年10月29日閲覧。 ^ Caldera DR-DOS 7.02 User Guide. Caldera, Inc.. (1998). オリジナルの2016-11-04時点におけるアーカイブ。. https://web.archive.org/web/20161104235434/http://www.drdos.net/documentation/usergeng/uglontoc.htm 2013年8月10日閲覧。  ^ a b 4DOS 8.00 online help. (2002-02-27). "[…] Multiple Commands: You can type several commands on the same command line, separated by a caret [^]. For example, if you know you want to copy all of your .TXT files to drive A: and then run CHKDSK to be sure that drive A's file structure is in good shape, you could enter the following command: C:\>COPY *.TXT A: ^ CHKDSK A: You may put as many commands on the command line as you wish, as long as the total length of the command line does not exceed 511 characters. You can use multiple commands in aliases and batch files as well as at the command line. If you don't like using the default command separator, you can pick another character using the SETDOS /C command or the CommandSep directive in 4DOS.INI. […] SETDOS /C: (Compound character) This option sets the character used for separating multiple commands on the same line. The default is the caret [^]. You cannot use any of the redirection characters [<>|], or the blank, tab, comma, or equal sign as the command separator. The command separator is saved by SETLOCAL and restored by ENDLOCAL. This example changes the separator to a tilde [~]: C:\>SETDOS /C~ (You can specify either the character itself, or its ASCII code as a decimal number, or a hexadecimal number preceded by 0x.) […] CommandSep = c (^): This is the character used to separate multiple commands on the same line. […] Special Character Compatibility: If you use two or more of our products, or if you want to share aliases and batch files with users of different products, you need to be aware of the differences in three important characters: the Command Separator […], the Escape Character […], and the Parameter Character […]. The default values of each of these characters in each product is shown in the following chart: […] Product, Separator, Escape Parameter […] 4DOS: ^, ↑, & […] 4OS2, 4NT, Take Command: &, ^, $ […] (The up-arrow [↑] represents the ASCII Ctrl-X character, numeric value 24.) […]"  ^ (ドイツ語) MSDOSTIPs — Tips für den Umgang mit MS-DOS 5.0-7. (1997-07-01). オリジナルの2017-08-22時点におけるアーカイブ。. https://web.archive.org/web/20170822214030/http://www.antonis.de/dos/dos-tuts/mpdostip/html/msdostip.htm 2013年10月25日閲覧。  (NB. MSDOSTIP.TXT is part of MPDOSTIP.ZIP, maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the MSDOSTIP.TXT file.) [4] ^ “Hinweise zu JPSofts 4DOS 5.5b/c, 5.51, 5.52a und NDOS” (ドイツ語). MPDOSTIP (1997年5月1日). 2016年11月4日時点のオリジナルよりアーカイブ。2015年5月8日閲覧。 (NB. The provided link points to a HTML-converted version of the 4DOS5TIP.TXT file, which is part of the MPDOSTIP.ZIP collection.) [5] 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] 表示 編集