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

[其他] 浅析批处理中为什么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]

回复 10# silience


    恩. 很严谨. 期待更多的探索.
非常批处理3群:56794763
有偿写程序.
批处理, lua, c, c++, vba, php, css

TOP

回复 9# jains521


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

TOP

这只是批处理对符号的预处理.
符号 ^ %等在批中都是会减半处理的,
非常批处理3群:56794763
有偿写程序.
批处理, lua, c, c++, vba, php, css

TOP

回复 7# batman


    我反应过来了。。。。

TOP

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

呵呵。。。。
***共同提高***

TOP

回复 4# CrLf


    论坛管理有查看ip的功能 和注册邮箱等,这不难做到。

TOP

我学习了!!!!

TOP

回复 2# Demon


    我勒个去,这也看得出

TOP

回复 2# Demon


    嗯哼 无所谓了 那个号以后不用了 。

TOP

TOP

返回列表