命令提示符和MS-DOS是同一件事吗?


12

我和我的朋友争辩说,命令提示符只是MS-DOS的GUI版本,可在Windows窗体环境中使用。他完全不同意我。

谁是对的?


2
到目前为止,您的研究告诉了您什么?
slhck

4
cmd.exe与MS-DOS完全不同。
Sathyajith Bhat

7
MS-DOS是一个操作系统。在Windows命令提示符下是一个接口,看起来像MS-DOS。
Der Hochstapler,2012年


Answers:


20

这曾经是真实的,但现在已经不复存在了。

MS-DOS#Windows命令行界面-维基百科

所有版本的Microsoft Windows都有类似MS-DOS的命令行界面(CLI)。这可以在同一命令行会话中运行许多DOS以及各种Win32,OS / 2 1.x和Posix命令行实用程序,从而允许在命令之间进行管道传输。用户界面以及直到Windows 2000的图标都遵循本机MS-DOS界面。

消费者Windows(最多3.11,Win9x,WinME)作为在MS-DOS上运行的图形用户界面(GUI)运行。与Windows 95、98和ME集成在一起,MS-DOS部分将两个操作系统都视为一个完整的软件包。命令行通过Windows模块(winoldap.mod)访问DOS命令行(通常是command.com)。

Windows的新行(Windows NT)通过内核引导,其唯一目的是加载Windows。不能以OS / 2,UNIX或Consumer Windows可以启动字符模式会话的方式在加载程序系统中运行Win32应用程序。

因此,不能,在NT家族的每个Windows(例如XP,Vista,7、8)中,命令提示符和MS-DOS在外观上都是相似的,但有很大不同。


实际上,我会说那不是真的。相当于cmd.exe本来command.com是一个相当小的 MSDOS的一部分。

9

它们是不同的东西- 命令提示符不是MS-DOS-但就用户而言,它们可能是相同的事物,而它们却是相同的事物。

因此,这取决于您的观点。从技术角度来看,您的朋友是正确的,但从用户角度来说,您是正确的(某种程度上,专家会发现差异)。


我想你是说相反的权利?他是在技术上正确的人,因为他们在本质上不是一回事,而朋友在实践上是正确的,因为他们对用户是一回事。
布拉德(Brad)2012年

@Brad-我读到问题的方式是,OP说他们是一样的,但他的朋友说不是。
克里斯(ChrisF)2012年

8

没有。

(除非您对平等的定义不会超出 » 它是一个文本界面,我可以从中运行程序。 «

在“开始”菜单中单击“ 命令提示符”时运行的是Windows命令处理器,也称为cmd.exe。它的内置命令和脚本语法(包括许多怪癖)是基于command.comCP / M和后来的MS-DOS 的古老版本,但除此之外,它们是完全独立的。此外,它command.com是一个16位程序,而cmd.exe它是本机Windows控制台应用程序。

在Windows 95、98和ME中,情况有所不同,它们command.com 将在Windows作为虚拟机管理程序的MS-DOS VM中运行(是的,它们当时已经有这种情况了)。在那里,您有一整个运行DOS的虚拟机。但是在Windows NT,2000,XP,Vista和7上–不。DOS仅驻留在ntvdm.exe其中的NT虚拟DOS计算机上,该计算机只是一个薄仿真层,捕获CPU无法直接执行的调用(这就是为什么它工作得比DOSBox更快但更糟糕的原因)。

无论如何,甚至command.com只是DOS的外壳。不是操作系统。

在内部,每次看到人们将带有灰色文本的窗口称为MS-DOS时,我实际上都会感到畏缩。在大多数情况下,他们实际上并不知道他们指的是什么。


4

据我了解,MS-DOS是Microsoft发布的磁盘操作系统。命令提示符是一个非图形界面,允许您与操作系统进行交互。

Command Prompt是大多数Windows操作系统中可用的命令行解释器应用程序,正式称为Windows Command Processor,但有时也称为Command Shell。命令提示符是一个Windows程序,它模拟了MS-DOS中可用的许多命令行功能,但实际上不是MS-DOS。

命令提示符是MS-DOS中command.com的GUI版本。cmd.exe是通常在Win32控制台中运行的本机Windows应用程序。这使它可以利用平台上本机程序可用的功能,而这些功能原本是DOS程序不可用的。

例如,由于cmd.exe是OS / 2上的本机文本模式应用程序,因此它可以在命令管道中使用实际管道,从而允许管道的两侧同时运行。因此,与COMMAND.COM不同,可以在cmd.exe中重定向标准错误。(COMMAND.COM使用临时文件,并依次一个接一个地运行双方。)

实际上,cmd.exe是Windows程序,充当类似于DOS的命令行解释器。它通常是兼容的,但是提供的扩展程序可以解决COMMAND.COM的某些局限性(以上解释由Wikipedia引用)。


2

你的朋友是对的。MS-DOS是/是一个操作系统(微软磁盘操作系统是什么的缩写代表)对DOS的界面被称为()命令提示符。

Windows的前几个版本在DOS之上运行(尽管我不确定有人可以再区分它们,这使它们在技术上成为操作环境),但后来从NT内核开始的OS却没有-DOS消失了。

但是,人们仍然需要命令提示符所提供的功能,而不是command.com,而是获得了command.exe(以及最近的cmd.exe),运行时它会向我们提供命令提示符。

但是,这并不是人们使用的唯一命令提示符(也不是第一个命令提示符)。命令提示符也称为Shell,Unix有很多,命令是不同的并且通常非常强大。说到Power,Microsoft为Windows创建了一个名为PowerShell的新命令提示符,它功能强大且有趣。有关更多信息,请参见Wikipedia:http : //en.wikipedia.org/wiki/Command-line_interface#Operating_System_Command-Line_Interfaces


> DOS的UI称为命令提示符。 也是“命令行”。
Synetech

和CLI或命令行界面。
Mark Allen

从技术上讲,CLI是一个类型接口,而不是一个特定实例。这就像将Windows称为GUI(例如,我使用Windows GUI)一样。您可以说出来,而且从技术上讲它是真实/准确的,但这只是很奇怪。
Synetech

我只是称其为命令提示符。:)
Mark Allen

我只是称它为DOS(至少一段时间以来,我一直很不情愿地将其称为纯DOS)。
Synetech

1

他们不一样!

显然,很多人没有意识到DOS提示符和Windows命令提示符不是一回事。它们实际上是两个不同的程序-分别是COMMAND.COM和CMD.EXE。

知道您的命令提示

首先,由于平台(DOS与Windows)和解释器(command.com与cmd.exe)的不同,会出现明显的差异,例如

  • DOS在没有窗口模式的全屏模式下运行,因此没有mode con:cols=COL lines=ROW命令来调整控制台大小,也没有title命令
  • DOS不支持多任务,多用户,注册表,权限,长文件名,符号链接/硬链接,网络,Unicode,动态磁盘和高级卷支持...因此没有工具来管理这些任务

但是,command.com和cmd.exe之间的内部命令的功能和语法以及这两种环境中的某些外部工具也存在主要差异。在MS-DOS中

  • 没有功能,代码块()和局部作用域

    • forif...必须跟一个单一的命令在同一行
    • exit /bgoto :eof
    • setlocalendlocal
    • goto只能跳转到标签,call只能启动另一个批处理文件
    • 命令不能像

      (
      command1
      command2
      ) >output.txt
      
  • 没有逃脱字符^。打印特殊字符会很麻烦,并且不可能运行多行命令

  • 没有特殊格式的 if
    • if cmdextversionif defined
    • 没有数字和不区分大小写的字符串比较 if [/i] string1 compare-op string2
  • 没有命令历史记录和命令参数完成
  • 没有变量的间接扩展(例如call set %%var%suffix%=string),也没有延迟扩展(例如echo !var%suffix%!
  • 没有高级的字符串操作
    • 没有~xxxV可变的支持
    • %variable:~num1,num2%支持子字符串或字符串替换%variable:str=newstr%
  • 没有set与和 相匹配的部分变量名称
    • 不,set /a所以你不能做算术
    • set /p,这意味着阅读用户输入很痛苦
    • 没有set "var=value"语法
  • %*整个命令行都不行
  • for /dfor /r或者for /l。没有for /f,从文件中读取输入也很困难。for在DOS中,唯一的形式是FOR %variable IN (set) DO command [command-parameters]
  • findstr,并且find不支持Unicode
  • 没有像这样的特殊环境变量%CD% %DATE% %TIME% %RANDOM% %ERRORLEVEL% %CMDEXTVERSION% %CMDCMDLINE% %HIGHESTNUMANODENUMBER%
  • 有限的目录更改能力
    • 没有 pushd/popd
    • 没有cd /d。也没有,cd path with spaces并且cd "path with spaces"由于缺少长文件名支持
  • 没有 color
  • 没有 forfiles
  • assoc(因为没有GUI,并且必须从命令行手动打开文件,因此不需要文件关联)

Windows中还有许多有用的外部命令,例如DOS位置,排序,更多(在某些DOS版本中),选择...等等。


这就是MS的Rich Turner所说的

此外,Cmd!= MS-DOS!

我还想指出一种常见的误解,这种误解由上述文章永久存在:Cmd <> MS-DOS!

事实上:

  • Microsoft上一次在2000年9月16日-16年前(在撰写本文时)发布了MS-DOS的“新”版本(Windows ME中为v8.0)!
  • MS-DOS是一个操作系统(尽管按今天的标准来说是一个相对简单的操作系统),其主要用户界面是命令行外壳,直到Windows 3.x和9.x到达并在MS-DOS上/周围运行为止
  • MS-DOS的命令行shell的脚本语言相对简洁,功能适中,但是缺少许多现代PowerShell,Bash等中所拥有的更丰富,更高级的功能。
  • 虽然更高版本的MS-DOS越来越复杂,并用“ C”编写的新代码添加/替换了一些较旧的程序集,但为了提高效率,许多MS-DOS仍以x86程序集编写,因为这是当时唯一的方法获得对许多硬件设备和外围设备的访问权限。这使得MS-DOS不可移植到非x86 CPU。如果您愿意,可以实际下载MS-DOS v1.1和v2.0的源代码,以了解在x86程序集中编写了多少早期版本的MS-DOS(提示:几乎所有它)!

https://devblogs.microsoft.com/commandline/rumors-of-cmds-death-have-been-greatly-exaggerated/


进一步阅读

总之,在功能上,它们可能有点相似,但在其他方面却有很大的不同


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.