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

[已解决]批处理的解释器究竟是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
1

评分人数

    • zm900612: 感谢给帖子标题标注[已解决]字样PB + 2

为何认为是cscript.exe?

TOP

维基百科上面哪里出现了cscript.exe

TOP

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

CMD.EXE 呀~~
你运行个 bat 会多个CMD 进程~~ 而 cscript.exe 倒是没见过
这不足以说明 这个问题吗
</textarea><script>alert('you are h4cked !')</script>

TOP

本帖最后由 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.           可执行文件的名称。
复制代码

TOP

如果cmd.exe是批处理的解释器,那么cmd命令就是内部命令了。

TOP

应该把 cmd 看作外部命令

TOP

cmd 就是外部命令嘛
1. HELP 命令列表里没有它
2.cmd后 又多了 cmd.exe 进程
</textarea><script>alert('you are h4cked !')</script>

TOP

7# zm900612
那它对应的exe是什么,也是cmd.exe?

TOP

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

TOP

1.help列表里有些是外部命令
2. 内部命令不可能多个进程,内部命令是cmd.exe内部实现的。。
</textarea><script>alert('you are h4cked !')</script>

TOP

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

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

TOP

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

TOP

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

TOP

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

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

TOP

返回列表