我和我的朋友争辩说,命令提示符只是MS-DOS的GUI版本,可在Windows窗体环境中使用。他完全不同意我。
谁是对的?
cmd.exe
与MS-DOS完全不同。
我和我的朋友争辩说,命令提示符只是MS-DOS的GUI版本,可在Windows窗体环境中使用。他完全不同意我。
谁是对的?
cmd.exe
与MS-DOS完全不同。
Answers:
这曾经是真实的,但现在已经不复存在了。
所有版本的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在外观上都是相似的,但有很大不同。
它们是不同的东西- 命令提示符不是MS-DOS-但就用户而言,它们可能是相同的事物,而它们却是相同的事物。
因此,这取决于您的观点。从技术角度来看,您的朋友是正确的,但从用户角度来说,您是正确的(某种程度上,专家会发现差异)。
(除非您对平等的定义不会超出 » 它是一个文本界面,我可以从中运行程序。 « )
在“开始”菜单中单击“ 命令提示符”时运行的是Windows命令处理器,也称为cmd.exe
。它的内置命令和脚本语法(包括许多怪癖)是基于command.com
CP / 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时,我实际上都会感到畏缩。在大多数情况下,他们实际上并不知道他们指的是什么。
据我了解,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引用)。
你的朋友是对的。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提示符和Windows命令提示符不是一回事。它们实际上是两个不同的程序-分别是COMMAND.COM和CMD.EXE。
首先,由于平台(DOS与Windows)和解释器(command.com与cmd.exe)的不同,会出现明显的差异,例如
mode con:cols=COL lines=ROW
命令来调整控制台大小,也没有title
命令但是,command.com和cmd.exe之间的内部命令的功能和语法以及这两种环境中的某些外部工具也存在主要差异。在MS-DOS中
没有功能,代码块()
和局部作用域
for
,if
...必须跟一个单一的命令在同一行exit /b
或goto :eof
setlocal
,endlocal
goto
只能跳转到标签,call
只能启动另一个批处理文件命令不能像
(
command1
command2
) >output.txt
没有逃脱字符^
。打印特殊字符会很麻烦,并且不可能运行多行命令
if
if cmdextversion
,if 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 /d
,for /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/
.bat
文件与旧的MS DOS .bat
文件有何不同?总之,在功能上,它们可能有点相似,但在其他方面却有很大的不同