TL; DR
当您运行32位控制台程序时,它由cmd
; 执行。当您运行16位控制台程序时,它由执行command
。
细节
Windows XP包括一个支持较旧的16位应用程序的子系统。
DOS和Windows程序都可以使用旧的16位应用程序。DOS程序本质上是控制台应用程序,并以类似于命令提示符的方式运行。但是,32位Windows控制台应用程序非常相似并且外观相同。
命令处理器/解释器cmd
有几个用途:
- 执行32位文本Windows控制台程序
- 为了提供和处理各种命令行功能(
dir
,copy
等)
- 解释并执行批处理文件(DOS兼容
.bat
文件和NT兼容.cmd
文件)
当您运行旧的16位控制台程序时,它由NTVDM(Windows NT虚拟DOS计算机)执行。它提供了一个仿真的DOS系统(因此称为虚拟DOS机),该系统类似于运行专用的虚拟机软件,但仿真层更简单。command
是命令解释器的16位版本,比cmd.exe
实际的Windows程序更接近实际的DOS (它具有Windows PE头,与command.com
DOS 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
)。这个问题与此效应有关。
command.com
是旧的16位版本(仅适用于32位安装)。它不会在Windows 7中的我的64位版本存在