cmd.exe は、コマンド プロンプトまたはWindows コマンド プロセッサとも呼ばれ、 Windowsの後のバージョン( NTおよびCEファミリー)、 OS/2 [ 1 ]、 eComStation、 ArcaOS、およびReactOS [ 2 ]のシェルプログラムです。Windowsの一部のバージョン ( CE .NET 4.2 [ 3 ]、 CE 5.0 [ 4 ]、およびEmbedded CE 6.0 [ 5 ] ) では、コマンド プロセッサ シェルと呼ばれています。実装はオペレーティングシステムによって異なりますが、動作と使用可能なコマンドにはかなりの一貫性があります。
以前の関連オペレーティングシステムであるDOSとWindows 9xでは、シェルとしてCOMMAND.COMが提供されていました。Windows製品ラインでは、NTの導入に伴い、COMMAND.COMはcmd.exeに置き換えられました。現在のバージョンのWindowsには、cmd.exeと並行して動作する代替シェルとしてPowerShellが含まれています。
Windows NT 用のcmd.exeの初期バージョンはTherese Stowellによって開発されました。[ 6 ] Windows CE 2.11 は、コンソールと Windows CE 版のcmd.exeをサポートする最初の組み込み Windows リリースでした。[ 7 ] ReactOS のcmd.exeの実装は、 FreeDOSコマンドライン インタプリタである FreeCOM から派生しています。[ 2 ]
Windowsでは、シェルはWindowsターミナルを介してデスクトップに表示されます。古いバージョンでは、Windowsコンソールを介して表示されます。
OS/2とWindowsでは、シェルはパイプをサポートしており、パイプラインの両側を同時に実行できます。そのため、標準エラー出力をリダイレクトすることが可能です。一方、COMMAND.COMは一時ファイルを使用し、両側を順番に実行します。
&複数のコマンドは、コマンド区切り文字、&&またはを使用して 1 行に含めることができます||。[ 8 ]
セパレータを使用すると&、前のコマンドがエラーを示した場合でも、後続のコマンドが実行されます。[ 9 ]次の例では、3 つのコマンドが終了コードに関係なく、1 つずつ順番に実行されます。
>コマンド A &コマンド B &コマンド C 区切り文字を使用する場合&&、後続のコマンドを実行するには、前のコマンドが成功(終了コード0を返す)する必要があります。次の例では、が正常に完了したCommandB場合にのみ が実行されCommandA、も正常に完了したCommandC場合にのみ が実行されますCommandB。
>コマンドA &&コマンドB &&コマンドC 区切り文字を使用する場合||、後続のコマンドを実行するには、前のコマンドが失敗(つまり、0以外の終了コードを返す)する必要があります。次の例では、が失敗したCommandB場合にが実行されCommandA、が成功したCommandC場合にが実行されますCommandB。
>コマンドA ||コマンドB &&コマンドC シェルは、入力されたテキスト、他のプロセスに継承される個々の環境変数、およびすべての環境変数展開を含むコマンドラインの長さを制限します[ 10 ] 。Windows XP以降では、最大長は8191(2 13 -1)文字です。Windows 2000やWindows NT 4.0などの以前のバージョンでは、最大長は2047(2 11 -1)文字です。
シェルは、 [ 8 ]と空白文字を特殊文字として予約します。場合によっては、このような文字を含む引数を二重引用符で囲むことで、特殊文字の処理を回避できます。例:&<>[]{}^=;!'+,`~
> echo me & you me 「you」は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されません。> echo "私とあなた" "私とあなた"以下のセクションでは、さまざまなオペレーティングシステム上のシェル実装における内部コマンドを一覧表示します。

OS/2 の内部コマンド: [ 11 ]

Windows NT 以降の内部コマンド: [ 12 ]

Windows CE .NET 4.2 [ 13 ] 、 Windows CE 5.0 [ 14 ]、および Windows Embedded CE 6.0 [ 15 ]の内部コマンド:
netコマンドは外部コマンドとして利用可能です。

ReactOS の内部コマンド: [ 2 ]
Windowsでは、cmd.exeはCOMMAND.COMと比較して、以下のような様々なユーザーエクスペリエンスの向上機能を提供します。
HELPSETLOCAL EnableDelayedExpansion、実行前にスクリプトを解析する代わりに実行時に変数の値を計算できるようにします (Windows 2000 以降)。これにより、制御構造の使用を困難で複雑にしていた DOS の慣用表現が修正されます。[ 16 ]拡張機能は無効にすることができ、より厳密な互換モードを提供します。DELTREErd/SSetLocalまた、EndLocalコマンドは環境への変更の範囲を制限します。コマンド実行後にコマンドライン環境に加えられた変更はバッチファイルSetLocal内でのみ有効です。コマンドは以前の設定を復元します。[ 17 ]EndLocalcallコマンドはバッチファイル内のサブルーチンを許可します。COMMAND.COMコマンドは外部バッチファイルの呼び出しのみをサポートします。CALLsetに匹敵します。set実行できます。forファイル名に加えてファイルや任意のセットの解析もサポートされるようになりました。pushdとpopdコマンドは、Webブラウザやファイルエクスプローラの進むボタンや戻るボタンと同様に、ナビゲートしたパスを遡ってアクセスできるようにします。if実行できます。これはDR-DOSでは利用可能でしたが、 PC-DOSやMS-DOSでは利用できませんでした。