Board logo

标题: [其他] 浅析批处理中为什么for命令用两个%%来表示迭代变量 [打印本页]

作者: silience    时间: 2012-11-14 15:17     标题: 浅析批处理中为什么for命令用两个%%来表示迭代变量

不多说 直接看图
[attach]5861[/attach]
↑一个百分号直接清除
[attach]5862[/attach]
↑一个百分号真的直接清除!
[attach]5863[/attach]
↑两个百分号查找百分号之间的字符作为变量名查询环境变量中对应的变量值,并清除百分号!
[attach]5864[/attach]
↑%a%按照上面的步骤处理完成,又是只有一个百分号——清除
[attach]5865[/attach]
↑一个百分号 往后看遇到第二个百分号 查看中间的字符 可惜并没有字符 则删除一个百分号 留下一个。
[attach]5866[/attach]
↑%a%%%按照上面的内容解析 又遇到%%情况。。。。参看上一个过程
[attach]5867[/attach]
↑周而复始。。。

但为什么命令行中一个%就好?
你可以在批处理写如下代码 然后在换到命令行中 区别赫然再现:
  1. echo %
复制代码
批处理会删除%号的!
也就是说你没事不小心在批处理中写了一个%是无所谓的。
反正都要被删除又或者你可以用两个%%中间插入一段注释 注意不能和变量撞衫怎么都行!
[attach]5868[/attach]
作者: Demon    时间: 2012-11-14 17:47

http://bbs.bathome.net/viewthread.php?tid=19962&highlight=

暴露身份了马甲
作者: silience    时间: 2012-11-14 18:15

回复 2# Demon


    嗯哼 无所谓了 那个号以后不用了 。
作者: CrLf    时间: 2012-11-14 18:56

回复 2# Demon


    我勒个去,这也看得出
作者: dfnss    时间: 2012-11-15 01:12

我学习了!!!!
作者: silience    时间: 2012-11-15 10:01

回复 4# CrLf


    论坛管理有查看ip的功能 和注册邮箱等,这不难做到。
作者: batman    时间: 2012-11-16 20:01

楼主是通过路径暴露的,还没意识到吗?

呵呵。。。。
作者: silience    时间: 2012-11-17 08:51

回复 7# batman


    我反应过来了。。。。
作者: jains521    时间: 2012-11-19 15:03

这只是批处理对符号的预处理.
符号 ^ %等在批中都是会减半处理的,
作者: silience    时间: 2012-11-19 17:48

回复 9# jains521


    不是简单的减半而是视情况运行。如下:
1.当遇到一个百分号则寻找下一个百分号 倘若在该命令行内(指某次执行的一整条命令)没发现下一个百分号则直接删除当前百分号
2.当遇到一个百分号并发现了下一个百分号时,查询两个百分号中间的字符扩展到的值 去掉两个百分号并置换变量,如果未定义变量则连带百分号一并删除。
3.当一个百分号查找下一个百分号发现中间不存在任何字符即两个百分号相连则删除一个百分号,留下一个。
作者: jains521    时间: 2012-11-19 19:38

回复 10# silience


    恩. 很严谨. 期待更多的探索.




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