找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 30783|回复: 14

[已解决]批处理的解释器究竟是cmd还是cscript

[复制链接]
发表于 2011-7-7 23:09:53 | 显示全部楼层 |阅读模式
很长一段时间认为是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

评分

参与人数 1PB +2 收起 理由
zm900612 + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-7-7 23:12:37 | 显示全部楼层
为何认为是cscript.exe?
发表于 2011-7-7 23:14:25 | 显示全部楼层
维基百科上面哪里出现了cscript.exe
发表于 2011-7-7 23:20:49 | 显示全部楼层
本帖最后由 vsbat 于 2011-7-7 23:21 编辑

CMD.EXE 呀~~
你运行个 bat 会多个CMD 进程~~ 而 cscript.exe 倒是没见过
这不足以说明 这个问题吗
 楼主| 发表于 2011-7-7 23:26:49 | 显示全部楼层
本帖最后由 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.           可执行文件的名称。
复制代码
 楼主| 发表于 2011-7-7 23:41:21 | 显示全部楼层
如果cmd.exe是批处理的解释器,那么cmd命令就是内部命令了。
发表于 2011-7-7 23:48:23 | 显示全部楼层
应该把 cmd 看作外部命令
发表于 2011-7-8 00:01:00 | 显示全部楼层
cmd 就是外部命令嘛
1. HELP 命令列表里没有它
2.cmd后 又多了 cmd.exe 进程
 楼主| 发表于 2011-7-8 00:37:16 | 显示全部楼层
7# zm900612
那它对应的exe是什么,也是cmd.exe?
 楼主| 发表于 2011-7-8 00:46:44 | 显示全部楼层
8# vsbat
1. HELP 命令列表里没有它(这也是我以前的错误认知(认为只要是help中的就是内部命令),事实上在help列表中的也有不少外部命令)
2.cmd后 又多了 cmd.exe 进程 (cmd命令本身就是用来调用cmd.exe的,即便理解cmd为内部命令也可以解释)
发表于 2011-7-8 01:14:59 | 显示全部楼层
1.help列表里有些是外部命令
2. 内部命令不可能多个进程,内部命令是cmd.exe内部实现的。。
 楼主| 发表于 2011-7-8 16:29:11 | 显示全部楼层
回11f:
1.help中有xcopy,xcopy是外部命令。

回12f:
外部和内部是相对而言的,我理解的内部命令就是整合在cmd.exe中不需要其他“名称.exe”支持的命令。
假设cmd命令是内部命令,你运行一个cmd(有一个cmd.exe了),你再用cmd内部命令调用一个cmd(此时有两个cmd.exe了)。
发表于 2011-7-8 19:41:25 | 显示全部楼层
“之所以认为是cscript是因为批处理中有cmd命令(认为cmd.exe是cmd命令)。”
这什么逻辑?
就算真的这么认为,为何不 dir /a/s/b C:\windows\cmd.* 验证一下呢?
 楼主| 发表于 2011-7-8 21:59:57 | 显示全部楼层
批处理确实是依靠cmd.exe运行的,且cscript命令不能解释批处理(vbs,js之类的可以)。以前的错误逻辑是这样的:既然有cmd命令,那么假设cmd命令是cmd.exe,那么批处理是依靠什么来解释的呢?——Cscript。
发表于 2011-7-8 22:17:41 | 显示全部楼层
真搞不懂你的逻辑。。。
以此类推:既然有wscript/cscript命令,那么假设wscript/cscript命令是wscript.exe/cscript.exe(其实本来就是),那么vbs/js是依靠什么来解释的呢?

看过楼主的一些帖子,觉得楼主的想法真是比较另类。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 15:33 , Processed in 0.012220 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表