use*_*733 13 windows command-line ms-dos cmd.exe
我和我的朋友争论说,命令提示符只是 MS-DOS 的 GUI 版本,它可以在 Windows 窗体环境中运行。他完全不同意我的看法。
谁是对的?
Den*_*nis 22
这曾经是真的,但现在不是了。
从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 或消费者 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 将在 MS-DOS VM 中运行,Windows 作为虚拟机管理程序(是的,他们当时已经有了这种东西)。在那里你有一个运行 DOS 的完整虚拟机。但在 Windows NT、2000、XP、Vista 和 7 上 - 不。DOS 只存在于ntvdm.exeNT 虚拟 DOS 机中,它只是一个薄的仿真层,捕获 CPU 无法直接执行的调用(这就是为什么它运行得更快但比 DOSBox 更差)。
无论如何,evencommand.com只是 DOS 的一个 shell。不是操作系统。
在里面,每次看到人们将带有灰底黑字的窗口称为 MS-DOS 时,我都会感到畏缩。在绝大多数情况下,他们实际上并不知道他们指的是什么。
据我了解,MS-DOS是微软发布的磁盘操作系统。命令提示符是一个非图形界面,允许您与操作系统交互。
\n\n命令提示符是大多数 Windows 操作系统中可用的命令行解释器应用程序,正式名称为 Windows 命令处理器,但有时也称为命令 shell。命令提示符是一个 Windows 程序,它模拟 MS-DOS 中提供的许多命令行功能,但它实际上并不是 MS-DOS。
\n\n命令提示符是\xc2\xa0a MS-DOS 中command.com 的GUI 版本。cmd.exe 是一个本机 Windows 应用程序,通常在 Win32 控制台中运行。这使得它能够利用平台上本机程序可用的功能,而 DOS 程序则无法使用这些功能。
\n\n例如,由于 cmd.exe 是 OS/2 上的本机文本模式应用程序,因此它可以在命令管道中使用真实管道,从而允许管道的两侧同时运行。因此,与 COMMAND.COM 不同,可以重定向 cmd.exe 中的标准错误。(COMMAND.COM 使用临时文件,并依次运行两侧。)
\n\n实际上,cmd.exe 是一个 Windows 程序,充当类似 DOS 的命令行解释器。它通常是兼容的,但提供了解决 COMMAND.COM 的一些限制的扩展(以上解释由 Wikipedia 引用)。
\n显然很多人没有意识到 DOS 提示符和 Windows 命令提示符不是一回事。它们实际上是两个不同的程序 - 分别是 COMMAND.COM 和 CMD.EXE。
首先,由于平台(DOS vs Windows)和解释器(command.comvs cmd.exe)的差异,会有明显的差异,例如
mode con:cols=COL lines=ROW命令来调整控制台大小,也没有title命令但和之间的内部命令的功能和语法以及两个环境中的一些外部工具也存在重大差异。在 MS-DOS 中有command.comcmd.exe
dir 1>out.txt, dir 2>err.txt, )dir >out.txt 2>&1不起作用()或局部作用域,这意味着
for, if... 必须在同一行后跟单个for ... (multiple lines)命令,无或if ... (multiple lines)
没有exit /b或goto :eof
不setlocal和endlocal
goto只能跳转到一个标签,call只能启动另一个批处理文件,而不能调用函数或进行间接扩展
命令不能像这样组合在一起
(
command1
command2
) >output.txt
Run Code Online (Sandbox Code Playgroud)
call set %%var%suffix%=stringecho !var%suffix%!^。打印特殊字符会很痛苦,并且不可能运行多行命令或将特殊参数传递给程序if,这意味着
if cmdextversion和if definedif [/i] string1 compare-op string2~xxxV支持变量扩展%variable:~num1,num2%支持子字符串或字符串替换%variable:str=newstr%set:
set(诸如set com或 之类的东西set pro不起作用)set "var=value"语法set /a,所以你不能做算术set /p,这意味着读取用户输入很痛苦for /d,for /r或者for /l。不for /f,所以从文件中读取输入也很困难。DOS 中的唯一形式for是FOR %variable IN (set) DO command [command-parameters]%*整个命令行没有变量findstr,并且find不支持 Unicode%CD% %DATE% %TIME% %RANDOM% %ERRORLEVEL% %CMDEXTVERSION% %CMDCMDLINE% %HIGHESTNUMANODENUMBER%pushd/popdcd /d。也没有cd path with spaces,cd "path with spaces"因为缺乏长文件名支持color命令forfiles,这意味着在文件上运行命令或获取特殊字符更加复杂shift /N。您一次只能移动一个参数assoc或ftype(因为没有 GUI 并且必须从命令行手动打开文件,因此不需要文件关联)许多其他内部命令也不可用:dpath、keys mklink、start。Windows 中许多有用的外部命令,where如, sort, more(在某些 DOS 版本中)choice... 在 DOS 中也缺失
这就是 MS 的 Rich Turner 所说的
另外,Cmd != MS-DOS!
我还想指出上述文章所延续的一个常见误解:Cmd <> MS-DOS!
实际上:
- Microsoft 上次发布“新”版本的 MS-DOS(Windows ME 中的 v8.0)是在 2000 年 9 月 16 日——16 年前(截至撰写本文时)!
- MS-DOS 是一个操作系统(尽管按照今天的标准来说是一个相对简单的操作系统),其主要用户界面是命令行 shell,直到 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 的源代码,看看有多少早期版本的 MS-DOS 是用 x86 程序集编写的(提示:几乎所有的它)!
https://devblogs.microsoft.com/commandline/rumors-of-cmds-death-have-been-greatly-exaggerated/
.bat现代文件与旧的 MS DOS文件有何不同.bat?总之,在功能方面它们可能有点相似,但在其他方面却有很大不同
| 归档时间: |
|
| 查看次数: |
32790 次 |
| 最近记录: |