Board logo

标题: [原创]Win2000/XP中的命令行[06-05-22] [打印本页]

作者: willsort     时间: 2006-5-16 19:40    标题: [原创]Win2000/XP中的命令行[06-05-22]

Win2000/XP中的命令行

Updated:2006-05-22

Windows2000/XP所缺省支持的命令行环境主要有两个:cmd.exe(以下简称CMD)和command.com(以下简称COMMAND),尽管它们许多方面与DOS很相似,但它们都不是DOS。它们只是操作系统Windows的外壳界面,而DOS(例如MS-DOS、FreeDOS等)则是独立的操作系统。

CMD是最常用的命令行环境,提供对系统中所有命令行程序的支持,包括32位PE格式的控制台程序和16位MZ格式的DOS程序;但它本身是一个32位的PE程序,所以在运行16位DOS程序前需要模拟一个环境,那就是“NT下的DOS虚拟机(NT Virtual DOS Machine,简称NTVDM)”,由%SystemRoot%\system32下的ntvdm.exe提供支持。因此,当我们刚刚打开CMD时,进程管理器中会显示出cmd.exe进程,而当在其中运行了一个16位的DOS程序后(比如debug),又会多出一个ntvdm.exe进程。

COMMAND是运行16位DOS程序的兼容性命令行环境,这个环境仍然由ntvdm.exe提供,而COMMAND不再是一个独立的“命令解释器”,而只是一个为了与低版本系统相兼容,而设计出的一个16位命令行环境的入口。所以,在运行COMMAND后,进程管理器只有一个ntvdm.exe进程,而不会有command.com进程。


CMD vs COMMAND

与COMMAND相比,CMD缺省提供了更多的命令行特性,比如多国语言显示和输入法(代码页)、更完善的字体(TrueType)、可以滚动浏览的窗口(屏幕缓冲区)、命令行历史记录和宏命令(DOSKEY)、文件和目录名自动完成、功能增强的内部命令(命令扩展)、实时更新的环境变量(延迟扩展)等等,这些特性在启动16位程序后将失效。

与CMD相比,COMMAND更像一个虚拟的PC机,许多运行16位程序所需要的硬件和软件环境都可以通过它模拟出来。它的启动过程与DOS相似,通过%SystemRoot%\system32\config.nt配置内存环境并加载所需要的硬件驱动,通过%SystemRoot%\system32\autoexec.nt执行某些启动虚拟环境时需要自动执行的任务。


命令行中的中文

Windows2000/XP简体中文版的CMD虽然缺省地支持中文代码页(936),但是这只是对32位程序而言;在使用了16位程序后,由于ntvdm.exe的影响,代码页会被强制切换回英文(437),因而不仅无法正常显示中文,并经常伴随着“Invalid keyboard code specified”的错误提示;而COMMAND则仅支持英文代码页,无法使用chcp进行代码页的切换。

解决这个问题的办法是graftabl.exe,这个启用在图形模式下显示扩展字符集的功能的工具,可以使16位程序处在英文代码页环境下仍然可以显示中文。

如果在CMD中,首先运行chcp 437将内部代码页切换为英文,再运行graftabl 936启用中文字符集显示,此后无论是否运行16位程序,则输出代码页均为中文,但此时仍无法使用中文输入法输入中文。

如果在COMMAND中,则内部代码页已为英文,可直接运行graftabl 936启用中文字符集显示,此时可在COMMAND中显示中文,但也无法输入中文。

如果在批处理脚本中,则预先写入chcp 437>nul和graftabl 936>nul两句,可以保证以后运行16位程序时正常地显示中文。


其它重要的命令行

“故障恢复控制台”是Windows2000/XP安装光盘上提供的命令行环境,主要用于修复系统故障的修复,缺省并不被安装到系统中。

“PowerShell”是下一代Windows的命令行工具,将是CMD的替代品,但目前仍没有列入到Windows2000/XP的缺省配置中,它需要.Net框架2.0的支持。

“微软管理规范命令行”提供了到 WMI 的简单接口,这样即可利用 WMI 管理运行 Microsoft Windows 的计算机,提供了命令行或脚本方式浏览和管理系统资源的便捷方式,它是WindowsXP所带来的新工具,第一次运行时会自动进行初始化安装配置。


相关的概念

命令行解释器(Command Processor/Command Interpreter)

命令行解释器是一个单独的软件程序,它可以在用户和操作系统之间提供直接的通讯。非图形命令行解释器用户界面提供运行基于字符的应用程序和实用程序的环境。命令行解释器通过使用类似于 MS-DOS 命令解释程序 command.com 的各个字符来执行程序并在屏幕上显示其输出。Windows 服务器操作系统(NT)命令行解释器使用命令解释程序 cmd.exe(该程序加载应用程序并指示应用程序之间的信息流动)将用户输入转换为操作系统可理解的形式。

命令提示符(Command Prompt)

1、命令行解释器cmd.exe的快捷方式,它可以打开一个CMD窗口,一般位于开始菜单的“附件”中;
2、命令行中输入每条命令前的提示文字,通常为当前所在路径信息,可以通过环境变量PROMPT来修改;

外壳/界面(Shell/Interface)

操作系统或其他系统中负责实现用户与系统内核交互的程序或模块。典型地,资源浏览器(explorer.exe)和命令行解释器(cmd.exe)都是Windows系统的外壳,前者是属于图形化界面(Graphic User Interface, GUI),后者则是命令行界面(Command Line Interface, CLI)。

控制台(Console)

1、对系统进行集约化控制和参数配置的环境。例如,图形界面的控制台有“微软管理控制台(Microsoft Management Console,MMC)”,命令行界面的有“命令行解释器(cmd)”和“微软管理规范命令行(wmic)”。
2、命令行环境下的输入输出设备,代号为con,它通常可以看作是键盘和屏幕的组合。


[ Last edited by willsort on 2006-5-22 at 15:03 ]
作者: electronixtar     时间: 2006-5-16 21:43
好!!!

建议写入wiki

[ Last edited by electronixtar on 2006-5-16 at 21:46 ]
作者: DOSforever     时间: 2006-5-22 12:23
写的好,尽管我对这种假 DOS 从不感兴趣,除非实际碰到。

另外更正一个小错误:应该是 Interpreter ,而不是 Interupter(Interrupter?)
作者: willsort     时间: 2006-5-22 14:30
Re DOSforever:

      感谢兄的指正,已对原文做出更新。此外的更新内容包括某些节段次序的调整、WMIC一段文字的补充和CMD和COMMAND简写的使用。

[ Last edited by willsort on 2006-5-22 at 15:04 ]
作者: penghy     时间: 2006-6-12 09:07
喜欢这类比较系统底层的文章。
作者: zilongzhao     时间: 2006-8-5 23:15
多谢版主的劳动。
作者: willsion     时间: 2006-8-6 21:07
学习一下。
作者: lhsum     时间: 2006-10-30 01:16


  Quote:
与COMMAND相比,CMD缺省提供了更多的命令行特性,比如多国语言显示和输入法(代码页)、更完善的字体(TrueType)、可以滚动浏览的窗口(屏幕缓冲区)、命令行历史记录和宏命令(DOSKEY)、文件和目录名自动完成、功能增强的内部命令(命令扩展)、实时更新的环境变量(延迟扩展)等等,这些特性在启动16位程序后将失效。

那如何才能使command支持doskey命令呢?
作者: electronixtar     时间: 2006-10-30 02:03
下载一个第三方的增强版 doskey 就行了,还支持 tab 列举目录呢
作者: lxmxn     时间: 2006-10-30 11:46

  恩,写得非常的好,希望楼主多写一些这样通俗易懂,篇幅不长,大家都看的懂的好文章给我们新手朋友看.呵呵..谢谢楼主...

作者: xuantian     时间: 2006-11-6 02:26
在CMD窗口中输入 Help 回车都有的
作者: lxmxn     时间: 2006-11-6 06:37


  Quote:
Originally posted by xuantian at 2006-11-6 02:26:
在CMD窗口中输入 Help 回车都有的


  汗一个先。。

  用这个help看到的只是一些基本命令的简单介绍,况且CMD的帮助有的很难理解,要看其它的资料才会慢慢的懂。

作者: abcdos     时间: 2006-11-16 05:30
好贴,顶
作者: whiteangel20305     时间: 2006-11-19 08:38
谢谢!!
作者: hq     时间: 2006-11-28 00:15
写的好,这样的文章就适合我这样的新手,很是感谢。希望楼主多写点这样通俗易懂的好文章。呵呵,谢谢啦。
作者: ccwan     时间: 2006-11-28 05:10
好贴!
作者: tao0610     时间: 2006-12-4 04:37
概念性的东西要多看看
作者: lxmxn     时间: 2006-12-27 09:56

  又回过头来看了一遍,经典。顶了。

作者: senffon     时间: 2007-2-1 12:26
echo exit|%ComSpec% /k prompt e 100 B4 00 B0 12 CD 10 B0 03 CD 10 CD 20 $_g$_q$_|debug>nul
chcp 437>nul
graftabl 936>nul
作者: gne3     时间: 2007-2-14 06:06
con有用吗
作者: gne3     时间: 2007-2-17 08:21
好帖,再次欣赏
作者: strong     时间: 2007-2-26 07:43
这个我喜欢,谢谢老大分享!!
作者: lpclimber     时间: 2007-3-4 22:18
喜欢这样的帖子,有深度!谢谢!
作者: xycoordinate     时间: 2007-3-18 21:52
深入浅出

GOOD!
作者: sansa520     时间: 2007-3-26 23:04
谢谢分享...貌似说的不错..
作者: Billunique     时间: 2007-3-28 00:47
太强了~你的底蕴好深~学习!
作者: sinoliu     时间: 2007-4-14 11:46
谢谢楼主啦~~~~
作者: mtiankong     时间: 2007-4-18 02:56
学习中。。
感谢楼主。。
作者: wzz     时间: 2007-5-1 07:36
感谢楼主!本人被这个问题困扰多年,一直没有好的解决办法。

这个问题的现象一是不能在16位 DOS 程序中显示中文,二是运行16位程序后,不仅不能显示中文,提示符中的长文件名和滚动条也没有了。虽然可运行 chcp 936 返回中文,但长文件名和滚动条永远消失,除非重新打开命令提示符窗口。

楼主的办法解决了显示中文的问题,但是不能找回长文件名和滚动条。最麻烦的是此时一些DOS程序不能显示,如调用 INT21 功能 02 显示出的内容为空白。

看来这是中文版的bug,装了中文字体的英文版 2000 和 XP 都没有这个问题。以前曾用英文版的 ntvdm.exe 替换中文版的,此问题的两个现象得到解决,但是16位 Windows 程序(NE格式)不能启动。后来发现运行16位 Windows 程序造成了英文 ntvdm.exe 崩溃。

不知这个毛病在 Vista 里修好没有?
作者: kkof2000     时间: 2007-5-1 09:20
学习学习
作者: minmin888     时间: 2007-5-12 20:59
graftabl 936
学习!多谢
作者: flandy     时间: 2007-6-21 10:48
谢谢楼主分享。.....
作者: tangfu     时间: 2007-12-27 21:51
想问一下,那个powershell功能到底如何?
作者: wangfei8842     时间: 2007-12-28 18:00
学习ing.........
作者: echo     时间: 2008-5-5 00:24
收藏,并学习ING……
作者: ldcatvwen     时间: 2008-9-3 09:27
学习一下
作者: ifly     时间: 2008-10-12 17:00
叙述清晰!
作者: huangsheng212     时间: 2008-10-12 17:32
很好的文章
作者: lotus516     时间: 2009-1-12 21:01
本文被抢劫了!
作者: wangfangjian     时间: 2009-2-14 00:28
支持 顶一个
作者: Declan     时间: 2009-6-29 21:32
发帖老被删的人顶一个!
作者: willweihome     时间: 2009-8-15 23:11
很喜欢willsort大师的帖子!
深入浅出
作者: 173814527     时间: 2009-12-11 13:54
都很好
作者: DosForXp     时间: 2010-2-12 11:44
了解
作者: sunhuiwang     时间: 2010-3-4 00:57
很好,新人受教了,发现这个论坛真的很好呢
作者: yuan53770     时间: 2010-3-6 23:28
讲得很仔细透彻,谢谢
作者: penghuahui     时间: 2010-4-11 16:55
这样的文章不错呀,学习了,谢谢LZ
作者: zhang8682     时间: 2010-4-18 00:01
看了,谢谢,很是受教。原来还有这个区别
作者: chardos     时间: 2010-4-20 18:57
谢谢LZ 拿个学分
作者: shiyuping2008     时间: 2010-7-8 01:04
的好,这样的文章就适合我这样的新手,很是感谢。希望楼主多写点这样通俗易懂的好文章。呵呵,谢谢啦。
作者: backup     时间: 2010-7-22 22:50
希望多写点这样通俗易懂的文章。
作者: zds1210     时间: 2010-9-27 19:07
好啊。我准备设计一个32位命令行的集成光盘。里面包括PE命令行版,支持分区及格式化,和ghost32;还包括系统控制台,还包括oobs blue con。
作者: Lying     时间: 2010-10-30 03:22
学习学习
作者: wxs81514     时间: 2010-11-11 15:28
深入浅出的好文章!
作者: chy505908440     时间: 2010-12-31 12:10
原来Command是兼容16位软件的啊