Windows中的CMD和Command提示符有什么区别?


30

到现在为止,我从来没有想过(和从未观察到),这cmdcommand是两个不同的东西。好吧,是吗?

看看这张照片:

在此处输入图片说明

实际上,cmd每当我要使用命令行(对于Git / VIM)时,我通常都会从“运行”对话框中打开。因此,我自定义了显示位置,字体,颜色等。今天,要进行更改,我键入commandRun而不是Run cmd,发现我的窗口上有一些新内容。它的窗口中有“ DOS”。

因此,显然cmd和之间应该有区别command。我想知道

  1. 他们之间的区别。
  2. 为什么Microsoft将它们分开(默认情况下,Unix和Linux只有一个Shell,Bash)。

11
我假设command.com是旧的16位版本(仅适用于32位安装)。它不会在Windows 7中的我的64位版本存在
明镜Hochstapler

11
UNIX和Linux具有不止一个外壳程序。默认外壳通常是Bash。
伊夫史密斯2012年

@ephsmith这就是我说的..
苏里亚

请注意,短语“命令提示符”在技术上可以用来指代command.exe或cmd.exe,但实际上几乎总是用来指​​cmd.exe。
哈里·约翰斯顿

Unix总共有四个shell,分别是csh,ksh,bash,zsh。
德布

Answers:


31

TL; DR

当您运行32位控制台程序时,它由cmd; 执行。当您运行16位控制台程序时,它由执行command

细节

Windows XP包括一个支持较旧的16位应用程序的子系统。

DOS和Windows程序都可以使用旧的16位应用程序。DOS程序本质上是控制台应用程序,并以类似于命令提示符的方式运行。但是,32位Windows控制台应用程序非常相似并且外观相同。

命令处理器/解释器cmd有几个用途:

  • 执行32位文本Windows控制台程序
  • 为了提供和处理各种命令行功能(dircopy等)
  • 解释并执行批处理文件(DOS兼容.bat文件和NT兼容.cmd文件)

当您运行旧的16位控制台程序时,它由NTVDM(Windows NT虚拟DOS计算机)执行。它提供了一个仿真的DOS系统(因此称为虚拟DOS机),该系统类似于运行专用的虚拟机软件,但仿真层更简单。command是命令解释器的16位版本,比cmd.exe实际的Windows程序更接近实际的DOS (它具有Windows PE头,与command.comDOS MZ头不同)。

command具有与cmd仅支持16位程序的目的相同的目的。另外,它不支持.cmd文件,内置命令更少,语法更受限制(cmd是一种更新,更现代,更高级的命令行解释器,类似于4DOS)。

但是,它支持图形化DOS程序(如旧游戏),但是运行它们的成功取决于视频卡驱动程序和程序的性质。有许多站点提供各种技巧来使DOS游戏在Windows上运行(尽管在Vista和更高版本上的成功通常比在XP上的成功更为有限)。

应当注意,Windows的64位版本已完全放弃了对16位程序的支持,因此根本不包含它command,因此DOS和Windows 16位程序都不会运行,而是会抛出(误导)错误消息。


技术说明

command.com具有.com与DOS程序的向后兼容性的扩展名,但是与外部DOS命令的大多数其他Windows版本一样,在内部,它实际上是Windows PE .exe文件。这提供了一个有趣的观察,即Windows将扩展名用作如何处理大多数文件类型的指示符,而对于可执行文件类型,它将忽略扩展名并查看其内容(否则,.exe如果将其视为,则将不起作用.com)。这个问题与此效应有关。


当然,虽然可以从cmd.exe运行32位控制台程序,但不必这样做。如果双击控制台模式的可执行文件,则该文件不会在“内部” cmd.exe中运行。同样,command.exe与NTVDM并非完全相同。
哈里·约翰斯顿

1
我讨厌用命令名开头一个句子。
Synetech

> command.exe与NTVDM No 并不完全相同,但它是其中的一部分,以及几个DLL(我试图在XP系统上使16位控制台应用程序正常工作时很难学到这一点。 )。
Synetech

“ DOS程序本质上就是控制台应用程序 ” –为什么这么说?非命令行非TUI DOS应用程序是否在某种程度上“不自然”?:)
Karan 2013年

Why would you say this? Are non-command line non-TUI DOS apps 'unnatural' in some way? 有点。在9x中,它们很好,但是图形应用程序(例如游戏)即使在XP +中也无法正常运行,因此,如今(自然)在Windows上运行的绝大多数DOS应用程序实际上都是命令行工具,而不是全面的图形化应用程序。在64位计算机上,16位应用程序根本不是本机运行,但是即使32位应用程序也通常是控制台应用程序,尤其是因为Vista放弃了全屏控制台的支持
Synetech

8

与DOS程序COMMAND.COM不同,cmd.exe是通常在Win32控制台中运行的本机Windows应用程序。这使它可以利用平台上本机程序可用的功能,而这些功能原本是DOS程序不可用的。

也...

与command.com的一揽子“错误的命令或文件名”(对于格式错误的命令)相比,cmd.exe的OS / 2和Windows NT版本都具有更详细的错误消息。

这是从这篇内容丰富的维基百科文章中得出的。

提到过如何将旧的command.com命令纳入新的cmd.exe功能...例如...

deltree(command.com)的功能以/ s参数的形式滚动到rd(cmd.exe)中

因此,随时阅读。


5

command.com 是DOS外壳程序,为兼容性而提供。

cmd.exe 是从OS / 2继承的本机Win32程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.