Board logo

标题: [已解决]批处理的解释器究竟是cmd还是cscript [打印本页]

作者: Hello123World    时间: 2011-7-7 23:09     标题: [已解决]批处理的解释器究竟是cmd还是cscript

很长一段时间认为是cmd.exe,后又有认为是cscript.exe,不过今天偶然去查维基百科却又疑惑了:

批处理(Batch)是一种简化的脚本语言,它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的命令解释器通常是COMMAND.COM或者CMD.EXE)解释运行。类似于Unix中的Shell脚本。批处理文件具有.bat或者.cmd的扩展名,其最简单的例子,是逐行书写在命令行中会用到的各种命令。更复杂的情况,需要使用if,for,goto等命令控制程序的运行过程,如同C,Basic等高级语言一样。如果需要实现更复杂的应用,利用外部程序是必要的,这包括系统本身提供的外部命令和第三方提供的工具或者软件。批处理程序虽然是在命令行环境中运行,但不仅仅能使用命令行软件,任何32位的Windows程序都可以放在批处理文件中运行。

来自“http://zh.wikipedia.org/wiki/%E6%89%B9%E5%A4%84%E7%90%86
作者: CUer    时间: 2011-7-7 23:12

为何认为是cscript.exe?
作者: Demon    时间: 2011-7-7 23:14

维基百科上面哪里出现了cscript.exe
作者: vsbat    时间: 2011-7-7 23:20

本帖最后由 vsbat 于 2011-7-7 23:21 编辑

CMD.EXE 呀~~
你运行个 bat 会多个CMD 进程~~ 而 cscript.exe 倒是没见过
这不足以说明 这个问题吗
作者: Hello123World    时间: 2011-7-7 23:26

本帖最后由 Hello123World 于 2011-7-7 23:31 编辑

之所以认为是cscript是因为批处理中有cmd命令(认为cmd.exe是cmd命令)。
  1. 启动 Windows 命令解释器的一个新实例
  2. CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
  3.     [[/S] [/C | /K] string]
  4. /C      执行字符串指定的命令然后终止
  5. /K      执行字符串指定的命令但保留
  6. /S      修改 /C 或 /K 之后的字符串处理(见下)
  7. /Q      关闭回显
  8. /D      禁止从注册表执行 AutoRun 命令(见下)
  9. /A      使向管道或文件的内部命令输出成为 ANSI
  10. /U      使向管道或文件的内部命令输出成为
  11.         Unicode
  12. /T:fg   设置前台/背景颜色(详细信息见 COLOR /?)
  13. /E:ON   启用命令扩展(见下)
  14. /E:OFF  禁用命令扩展(见下)
  15. /F:ON   启用文件和目录名完成字符(见下)
  16. /F:OFF  禁用文件和目录名完成字符(见下)
  17. /V:ON   使用 ! 作为分隔符启用延迟的环境变量
  18.         扩展。例如,/V:ON 会允许 !var! 在执行时
  19.         扩展变量 var。var 语法会在输入时
  20.         扩展变量,这与在一个 FOR
  21.         循环内不同。
  22. /V:OFF  禁用延迟的环境扩展。
  23. 注意,如果字符串加有引号,可以接受用命令分隔符 "&&"
  24. 分隔多个命令。另外,由于兼容性
  25. 原因,/X 与 /E:ON 相同,/Y 与 /E:OFF 相同,且 /R 与
  26. /C 相同。任何其他开关都将被忽略。
  27. 如果指定了 /C 或 /K,则会将该开关之后的
  28. 命令行的剩余部分作为一个命令行处理,其中,会使用下列逻辑
  29. 处理引号(")字符:
  30.     1.  如果符合下列所有条件,则会保留
  31.         命令行上的引号字符:
  32.         - 不带 /S 开关
  33.         - 正好两个引号字符
  34.         - 在两个引号字符之间无任何特殊字符,
  35.           特殊字符指下列字符: &<>()@^|
  36.         - 在两个引号字符之间至少有
  37.           一个空格字符
  38.         - 在两个引号字符之间的字符串是某个
  39.           可执行文件的名称。
复制代码

作者: Hello123World    时间: 2011-7-7 23:41

如果cmd.exe是批处理的解释器,那么cmd命令就是内部命令了。
作者: CrLf    时间: 2011-7-7 23:48

应该把 cmd 看作外部命令
作者: vsbat    时间: 2011-7-8 00:01

cmd 就是外部命令嘛
1. HELP 命令列表里没有它
2.cmd后 又多了 cmd.exe 进程
作者: Hello123World    时间: 2011-7-8 00:37

7# zm900612
那它对应的exe是什么,也是cmd.exe?
作者: Hello123World    时间: 2011-7-8 00:46

8# vsbat
1. HELP 命令列表里没有它(这也是我以前的错误认知(认为只要是help中的就是内部命令),事实上在help列表中的也有不少外部命令)
2.cmd后 又多了 cmd.exe 进程 (cmd命令本身就是用来调用cmd.exe的,即便理解cmd为内部命令也可以解释)
作者: vsbat    时间: 2011-7-8 01:14

1.help列表里有些是外部命令
2. 内部命令不可能多个进程,内部命令是cmd.exe内部实现的。。
作者: Hello123World    时间: 2011-7-8 16:29

回11f:
1.help中有xcopy,xcopy是外部命令。

回12f:
外部和内部是相对而言的,我理解的内部命令就是整合在cmd.exe中不需要其他“名称.exe”支持的命令。
假设cmd命令是内部命令,你运行一个cmd(有一个cmd.exe了),你再用cmd内部命令调用一个cmd(此时有两个cmd.exe了)。
作者: powerbat    时间: 2011-7-8 19:41

“之所以认为是cscript是因为批处理中有cmd命令(认为cmd.exe是cmd命令)。”
这什么逻辑?
就算真的这么认为,为何不 dir /a/s/b C:\windows\cmd.* 验证一下呢?
作者: Hello123World    时间: 2011-7-8 21:59

批处理确实是依靠cmd.exe运行的,且cscript命令不能解释批处理(vbs,js之类的可以)。以前的错误逻辑是这样的:既然有cmd命令,那么假设cmd命令是cmd.exe,那么批处理是依靠什么来解释的呢?——Cscript。
作者: powerbat    时间: 2011-7-8 22:17

真搞不懂你的逻辑。。。
以此类推:既然有wscript/cscript命令,那么假设wscript/cscript命令是wscript.exe/cscript.exe(其实本来就是),那么vbs/js是依靠什么来解释的呢?

看过楼主的一些帖子,觉得楼主的想法真是比较另类。。。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2