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

[其他] 浅析批处理中为什么for命令用两个%%来表示迭代变量

[复制链接]
发表于 2012-11-14 15:17:00 | 显示全部楼层 |阅读模式
不多说 直接看图

↑一个百分号直接清除

↑一个百分号真的直接清除!

↑两个百分号查找百分号之间的字符作为变量名查询环境变量中对应的变量值,并清除百分号!

↑%a%按照上面的步骤处理完成,又是只有一个百分号——清除

↑一个百分号 往后看遇到第二个百分号 查看中间的字符 可惜并没有字符 则删除一个百分号 留下一个。

↑%a%%%按照上面的内容解析 又遇到%%情况。。。。参看上一个过程

↑周而复始。。。

但为什么命令行中一个%就好?
你可以在批处理写如下代码 然后在换到命令行中 区别赫然再现:

  1. echo %
复制代码
批处理会删除%号的!
也就是说你没事不小心在批处理中写了一个%是无所谓的。
反正都要被删除又或者你可以用两个%%中间插入一段注释 注意不能和变量撞衫怎么都行!
发表于 2012-11-14 17:47:19 | 显示全部楼层
 楼主| 发表于 2012-11-14 18:15:46 | 显示全部楼层
回复 2# Demon


    嗯哼 无所谓了 那个号以后不用了 。
发表于 2012-11-14 18:56:37 | 显示全部楼层
回复 2# Demon


    我勒个去,这也看得出
发表于 2012-11-15 01:12:51 | 显示全部楼层
我学习了!!!!
 楼主| 发表于 2012-11-15 10:01:12 | 显示全部楼层
回复 4# CrLf


    论坛管理有查看ip的功能 和注册邮箱等,这不难做到。
发表于 2012-11-16 20:01:02 | 显示全部楼层
楼主是通过路径暴露的,还没意识到吗?

呵呵。。。。
 楼主| 发表于 2012-11-17 08:51:30 | 显示全部楼层
回复 7# batman


    我反应过来了。。。。
发表于 2012-11-19 15:03:22 | 显示全部楼层
这只是批处理对符号的预处理.
符号 ^ %等在批中都是会减半处理的,
 楼主| 发表于 2012-11-19 17:48:31 | 显示全部楼层
回复 9# jains521


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


    恩. 很严谨. 期待更多的探索.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 02:43 , Processed in 0.021631 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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