答案1
总结
当你运行 32 位控制台程序时,它由 执行cmd
;当你运行 16 位控制台程序时,它由 执行command
。
细节
Windows XP 包含一个支持旧式 16 位应用程序的子系统。
旧的 16 位应用程序既可以用作 DOS 程序,也可以用作 Windows 程序。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 上更有限)。
需要注意的是,64 位版本的 Windows 已经完全放弃了对 16 位程序的支持,因此command
根本不包括,所以 DOS 和 Windows 16 位程序都无法运行,而是会抛出(误导)错误信息。
技术说明
command.com
具有.com
与 DOS 程序向后兼容的扩展名,但与大多数其他 Windows 版本的外部 DOS 命令一样,在内部,它实际上是 Windows PE.exe
文件。这提供了一个有趣的观察结果:虽然 Windows 使用扩展名作为如何处理大多数文件类型的指标,但对于可执行文件,它会忽略扩展名并查看其内容(否则如果将其.exe
视为 ,则将不起作用.com
)。这个问题与此影响有关。
答案2
与 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)
因此,请随意阅读。
答案3
它们是不同的 shell,因此语法和许多其他东西都不同。其他答案中提供了一些很好的信息,因此这里是对语法差异的总结。有关更多详细信息,请阅读我的答案:命令提示符和 MS-DOS 是同一个东西吗?
command.com
不支持使用以下命令进行分组()
command.com
没有函数或局部作用域command.com
没有转义字符,^
位于cmd.exe
command.com
不支持if cmdextversion
andif defined
,也不支持数字和不区分大小写的字符串比较if [/i] string1 compare-op string2
command.com
没有命令历史记录和命令参数完成command.com
不支持间接扩张(例如call set %%var%suffix%=string
)变量或延迟扩张(例如echo !var%suffix%!
)command.com
不支持高级字符串操作:否~xxxV
多变的,没有子字符串%variable:~num1,num2%
或字符串替换%variable:str=newstr%
set
中的命令不command.com
支持部分变量名匹配,并且没有set /a
、set /p
或set "var=value"
command.com
不支持%*
扩展到整个命令行command.com
没有for /d
、for /r
或for /l
for /f
command.com
没有特殊环境变量喜欢%CD% %DATE% %TIME% %RANDOM% %ERRORLEVEL% %CMDEXTVERSION% %CMDCMDLINE% %HIGHESTNUMANODENUMBER%
command.com
没有pushd/popd
或cd /d
。显然它不支持cd path with spaces
和cd "path with spaces"
喜欢cmd.exe
command.com
没有color
或title
命令