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

[其他] 简单的批处理执行顺序分析

[复制链接]
发表于 2012-11-4 03:30:48 | 显示全部楼层 |阅读模式
A:在批处理中,通常是以回车来表示一条命令的结束,并以换行来转交给下面的命令,这就是我以下的论据
但是还是有两种情况来打破这个的,其一是转义,这个不多解释。其二则是优先级,以下则是具简单的分析过程
B:当解释器读取命令时,遇到分组符号时暂时停止。检查是否是一个命令,当然这是有顺序的,首先自然是CMD的内部命令,然后则是批处理脚本当前目录(这个有些人会想起什么么?这就是为什么不以命令来命明脚本的原因了),之后才是我们可悲的可执行路径。不过在这里我先暂停一下,来看一下,这个执行过程是从内到外的。当某个命令中有其自已的关键字时,则优先把其内部的关键字作为“命令”。然后才是CMD内部的,等等和我前面所写的差不多,不过在可执行路径中其实也是有顺序的,其证明过程很简单,我就不多写了,(另外说一句多于的,还有注册表可以)。
其实原理很简单,就是全局变量和区域变量,类似的线程和进程等等。在此我举2个例子IF的ELSE和FOR的内部变量%%A,OPTIONS(以点代面)。
接下来回到前面所述,批处理以分组符号进行分组,把前面的试为命令,并按B的顺序进行查找,找到了则会进入下一步的判断,没有则会出现相应的提示,当然现在我们不会让它出错,要不就没法继续写了。这之后的工作则是按照分组符号分组后所形成的参数进行判断,其具体过程不必细说,因为其中有大量C的操作,在这之前还有一步工作就是找到回车符,要不无法判断其是否结束(这里是和C有些区别的,C是NUL,之所以P不以它作为命令的结束,是因为它作了C的字符串的结束标志,可以说是二步结束了,呵呵)。此时命令会把所有的参数逐一带入,进行判断。如果其中有不正确的则退出,并提示出错。
之后就明了了,在没有到达最后一个回车前它就一直循环执行B操作。其实之所以会退出,也就是在回车换行之后没有找到相应的操作,所以结束了。
以上是大部分的命令执行过程,接下来还有几个复合语句
其实复合语句也是按照我上面分析的过程来执行的,不过需要特别注意几点
那就是括号具有超然的优先级存在着,它可以被分组符号当成一个整体,之后在其内部按照B操作,直到括号匹配结束。之后进行以上的操作
其实优先级很重要,它决定了执行的顺序,从而产生了效率的因素。
在此插入多余一句,在优先级相同的情况下则进行顺序执行,在C中则是从左到右,或从右到左。

不过老实说,我并想写这些的,只不过一时口快而以,不过以上都是个人的理解,如果有错误的话,还请指出,我在这里只求学习与交流,没有其它的打算。
PS:以上所述只是临时写的,没有什么检查,还请荐谅,另外预处理并没有过多的分析,本人还有其它的事,所以就不在多说了
希望大家能看完之后再说自已的想法。同时多谢各位的支持与帮助
 楼主| 发表于 2012-11-4 03:33:42 | 显示全部楼层
以上只是因为
http://www.bathome.net/thread-19913-1-1.html
作的一些工作而以,并有其它的什么意思,如有和其它文章相似之处,存属巧合
发表于 2012-11-4 12:24:49 | 显示全部楼层
完全看不懂。
发表于 2012-11-4 14:04:08 | 显示全部楼层
这个话题让我想起了plp的某贴:
  1. http://bbs.bathome.net/thread-15051-1-1.html
复制代码
另,建议楼主分段明显一点,不然看着确实挺晕
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 20:56 , Processed in 0.017472 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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