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