web-dev-qa-db-ja.com

ウィンドウでのCMDとコマンドプロンプトの違いは何ですか?

今まで、cmdcommandが2つの異なるものだとは思っていませんでした。さて、彼らはいますか?

この写真を見てください:

enter image description here

実際、私は通常、コマンドライン(Git/VIMの場合)を実行したいときはいつでも、[実行]ダイアログからcmdを開きます。そこで、表示位置、フォント、色などをカスタマイズしました。今日は、変更のために、Runでcommandではなくcmdと入力し、ウィンドウに何か新しいものがあることを発見しました。 ウィンドウに「DOS」が表示されます。

したがって、cmdcommandの間には明らかに違いがあるはずです。私が知りたいのですが

  1. それらの違い。
  2. Microsoftがそれらを分離した理由(UnixとLinuxには、デフォルトで1つのシェル、Bashしかありません)。
29
Surya

TL; DR

32ビットのコンソールプログラムを実行すると、cmdによって実行されます。 16ビットのコンソールプログラムを実行すると、commandによって実行されます。

細部

Windows XPには、古い16ビットアプリケーションをサポートするサブシステムが含まれています。

古い16ビットアプリケーションは、DOSプログラムとWindowsプログラムの両方として使用できます。 DOSプログラムはその性質上、コンソールアプリケーションであり、コマンドプロンプトのように動作します。ただし、32ビットWindowsコンソールアプリケーションは非常によく似ており、同じように見えます。

コマンドプロセッサ/インタープリタcmdにはいくつかの目的があります。

  • 32ビットテキストのWindowsコンソールプログラムを実行するには
  • さまざまなコマンドライン関数(dircopyなど)を提供して処理するには
  • バッチファイルの解釈と実行(DOS互換.batファイルとNT互換.cmdファイル)

古い16ビットコンソールプログラムを実行すると、NTVDM(Windows NT仮想DOSマシン)によって実行されます。それはエミュレートされたDOSシステム(したがって仮想DOSマシン)を提供します。これは、専用の仮想マシンソフトウェアの実行と似ていますが、エミュレーションレイヤーが単純です。 commandは、実際にはWindowsプログラムであるcmd.exeよりも実際のDOSに近い16ビットバージョンのコマンドインタープリターです(command.comとは異なり、Windows PEヘッダーがあります) DOS MZヘッダーがあります)。

commandは、16ビットプログラムのみをサポートすることを除いて、cmdと同じ目的を持っています。さらに、.cmdファイルをサポートせず、組み込みコマンドが少なく、構文がより制限されています(cmdは、より新しく、よりモダンで、より高度なコマンドラインインタープリターです。 4DOS )。

ただし、それは(古いゲームのような)グラフィカルDOSプログラムをサポートしますが、それらの実行の成功は、ビデオカードドライバーとプログラムの性質によって異なります。 WindowsでDOSゲームを実行するための さまざまなトリック を提供するサイトは多数あります(ただし、Vista以降での成功は通常、XPよりも制限されます)。

64ビットバージョンのWindowsでは、16ビットプログラムのサポートが完全に削除されているため、commandをまったく含めないでください。DOSもWindows 16ビットプログラムも実行されず、代わりにスローされます。 a(誤解を招く) エラーメッセージ


テクニカルノート

command.comにはDOSプログラムとの後方互換性のために.com拡張子がありますが、他のほとんどのWindowsバージョンの外部DOSコマンドと同様に、内部的には実際にはWindows PE .exeファイルです。これは、Windowsが拡張子をほとんどのファイルタイプの処理方法のインジケータとして使用する一方で、実行可能ファイルの拡張子を無視してその内容を確認するという興味深い観察を提供します(そうでない場合、.exeは、 a .com)。 この質問 はこの影響に関連しています。

31
Synetech

DOSプログラムであるCOMMAND.COMとは異なり、cmd.exeは通常Win32コンソールで実行されるネイティブWindowsアプリケーションです。これにより、プラットフォーム上のネイティブプログラムで利用できる機能を利用できます。この機能は、DOSプログラムでは利用できません。

また...

OS/2とWindows NTバージョンのcmd.exeの両方に、command.comの包括的な「不正なコマンドまたはファイル名」(不正なコマンドの場合)よりも詳細なエラーメッセージがあります。

これは この情報 ウィキペディアの記事からです。

古いcommand.comコマンドが新しいcmd.exe機能にどのように組み込まれたかについての言及があります...たとえば...

deltree(command.com)の機能は、/ sパラメータの形式でrd(cmd.exe)に組み込まれました。

だから、お気軽に読んでください。

8
Bon Gart

command.comは、互換性のために提供されているDOSシェルです。

cmd.exeはOS/2から継承されたネイティブのWin32プログラムです。

5
kinokijuf