 
- 帖子
- 531
- 积分
- 1554
- 技术
- 94
- 捐助
- 0
- 注册时间
- 2008-7-17
|
内部命令你到底知道多少?
内部命令也有很多奇怪的地方
首先内部命令在cmd和command中的入口
并不是按照字母顺序排列的
否则顶楼也不会有字母序和命令表两种排列方式
也不是命令的出现的先后顺序
或者命令的功能分类等排列的
甚至cmd和command的排序都是不一样的
也就是说同是一家产品
却采用了不一样的排列规则
其次类似CMDEXTVERSION EXIST DEFINED NOT ERRORLEVEL等
IF命令的关键词也被列为同IF一个级别的命令
而ELSE IN DO等关键词则未出现在其中
这种CMD的处理模式很值得我们思考
同时也有助于我们理解某些语句内部变量延迟的用法
再次COMMAND中的某些内部命令是无效的
即使是在COMMAND自己的命令Shell中
比如truename loadhigh lh等命令
执行时报命令无法识别的错误
因为这些COMMAND中的命令在CMD中没有入口
所以可以判断COMMAND完全是徒有其表的一副空架子
内核则基本上被NTVDM和CMD替代了
执行16位程序时借用了NTVDM的资源
执行32位程序甚至大多数内部命令时又借用了CMD的资源
比如在command中执行一个比较长时间的dir
此时打开任务管理器就可以在发现cmd的身影
而经过进程跟踪可以发现command执行诸如dir copy等这些内部命令
都是通过简单的“cmd /c 命令行”的形式把包袱甩给了cmd
所以说COMMAND只是一个“入口程序”完全不为过
最后说一说从dos到win9x再到win2k,winxp
很多内部命令发生了变化
包括原来不是内部命令的成了内部命令(比如move)
原来是内部命令的现在被排除在外(比如chcp)
有很多内部命令从无到有(比如setlocal/endlocal,pushd/popd)
也有很多内部命令从有化无(比如ctty,loadhigh)
更多的内部命令功能特性发生变化
如dir、cd之流只是锦上添花增加了一些开关和参数
而for、if之辈则是大动干戈cmd美其名曰命令扩展
甚而像break之类更是脱胎换骨重新做命令
最可叹append之族愣是移花接木做了个双面命令
内部命令转行作外部命令(有append.exe为证)
竟然还在cmd内部留了个卧底(有dpath为证)
虽然windows在官方文档中留了一个命令变迁表(ntcmds.chm::/dos_diffs.htm)
可也是半遮半露浅尝辄止欲语还休
直让人感叹“不识命令真面目,只缘身在cmd中”啊!
[ 本帖最后由 qzwqzw 于 2010-4-28 16:58 编辑 ] |
-
1
评分人数
-
|