[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] “内部命令”你知道多少

cmd内部命令(49个)

字母序排列
ASSOC BREAK CALL CD CHDIR CLS CMDEXTVERSION COLOR COPY DATE DEFINED DEL DIR DPATH ECHO ENDLOCAL ERASE ERRORLEVEL EXIST EXIT FOR FTYPE GOTO IF KEYS MD MKDIR MOVE NOT PATH PAUSE POPD PROMPT PUSHD RD REM REN RENAME RMDIR SET SETLOCAL SHIFT START TIME TITLE TYPE VER VERIFY VOL

命令表排列
DPATH CALL CD COLOR TITLE CHDIR CLS CMDEXTVERSION DEFINED COPY PATH PROMPT PUSHD POPD ASSOC FTYPE DATE DEL DIR ECHO ENDLOCAL ERASE ERRORLEVEL EXIT EXIST BREAK FOR GOTO IF KEYS MKDIR MD NOT PAUSE RD REM MOVE RENAME REN RMDIR SET SETLOCAL SHIFT START TIME TYPE VERIFY VER VOL

command内部命令(40个)

字母序排列
BREAK CALL CD CHCP CHDIR CLS COPY CTTY DATE DEL DIR ECHO ERASE ERRORLEVELF EXIST EXIT FOR GOTO IF LH LOADHIGH MD MKDIR NOT PATH PAUSE PROMPT RD REM REN RENAME RMDIR SET SHIFT TIME TRUENAME TYPE VER VERIFY VOL

命令表排列
NOT ERRORLEVELF EXIST DIR CALL CHCP RENAME REN ERASE DEL TYPE REM COPY PAUSE DATE TIME VER VOL CD CHDIR MD MKDIR RD RMDIR BREAK VERIFY SET PROMPT PATH EXIT CTTY ECHO GOTO SHIFT IF FOR CLS TRUENAME LOADHIGH LH

别名命令
CD CHDIR
DEL ERASE
LOADHIGH LH
MD MKDIR
RD RMDIR
RENAME REN
天的白色影子

强大..学习了..
非常批处理3群:56794763
有偿写程序.
批处理, lua, c, c++, vba, php, css

TOP

学习了@!@
钱不在多够用就行,知识不怕多学到老都行

TOP

一个Good发现
从现在的分析结果来看
真正的命令入口确实如你所言
以前的分析还真是浅尝辄止

从现在的 ...
qzwqzw 发表于 2012-9-17 09:30


从别名命令放在一起可以看出,应该是经过一定的编排,只不过带有某种随意性。

CMD命令名称串只不过是C字符串常量而已,字符串常量由编译器来处理,一般放到.data段或.rdata段,

虽然一般来说编译后字符串常量的顺序与程序中定义的顺序一致,但是这并不是必须的,

字符串常量在内存的哪个地方并不重要,因为在使用字符串常量的地方会被编译为相应的内存地址。

TOP

一个Good发现
从现在的分析结果来看
真正的命令入口确实如你所言
以前的分析还真是浅尝辄止

从现在的入口表来看
仍然找不到排序的规律性
不知道这是否可以归结为随意性
当然是指程序员整体而非个体

至于cmd命令名称串的排列顺序
把它解释为编译器的决定似乎有失偏颇
即使是出于优化程序的需要
对同类数据资源的排列顺序做出变更
也不应该是编译器的权限所能决定
天的白色影子

TOP

这里所说的命令表就是指cmd.exe或者command.com二进制文件内部的命令名称串
该表的排列顺序大致遵循字母序 ...
qzwqzw 发表于 2012-9-14 23:04


   
指的是这个么?

这个排列是由编译器来决定的,不是由程序员编排的,XP和Win 7并不一样。

CMD内部的确有一个表(数组),用来把命令名称的字符串映射到对应的内部函数,但是排序并不是你给出的那样。


这才是由程序员编排的,XP与Win 7一致(Win 7多了个MKLINK命令)
  1. DIR
  2. ERASE
  3. DEL
  4. TYPE
  5. COPY
  6. CD
  7. CHDIR
  8. RENAME
  9. REN
  10. ECHO
  11. SET
  12. PAUSE
  13. DATE
  14. TIME
  15. PROMPT
  16. MD
  17. MKDIR
  18. RD
  19. RMDIR
  20. PATH
  21. GOTO
  22. SHIFT
  23. CLS
  24. CALL
  25. VERIFY
  26. VER
  27. VOL
  28. EXIT
  29. SETLOCAL
  30. ENDLOCAL
  31. TITLE
  32. START
  33. DPATH
  34. KEYS
  35. MOVE
  36. PUSHD
  37. POPD
  38. ASSOC
  39. FTYPE
  40. BREAK
  41. COLOR
  42. FOR
  43. IF
  44. REM
  45. CMDEXTVERSION
  46. ERRORLEVEL
  47. DEFINED
  48. EXIST
  49. NOT
复制代码

TOP

这里所说的命令表就是指cmd.exe或者command.com二进制文件内部的命令名称串
该表的排列顺序大致遵循字母序
也有一些命令与历史渊源相关,比如ASSOC FTYPE
还有一些命令名称发生了变迁,比如
DPATH 原本的名称是 APPEND 所以排序比较靠前
还有一些命令可能存在二义性名称
比如BREAK 某些情境下会叫 EXTPROC 所以排序在EXIT之后

但是总体来说
这个排列带有很大的随机性
或者可以理解为程序员们的随意性
因为这些命令表并非是同一时期由同一批程序员维护的
所以排列带了很多的个性色彩
天的白色影子

TOP

何谓命令表排列?

TOP

内部命令你到底知道多少?

内部命令也有很多奇怪的地方

首先内部命令在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

评分人数

    • plp626: 有收获,谢谢分享PB + 15
天的白色影子

TOP

坐坐板凳 ,谢谢分享!

TOP

谢谢楼主分享!学习了!呵呵...

TOP

返回列表