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

回复 11楼 的帖子

多谢回复,陈述自己的观点和发现,有借鉴意义。
Still with wax

TOP

回复 13楼 的帖子

多谢热心跟帖给链接。我看了链接,前面都懂了,可是后来你又给了几个代码,类似(
(
:a
::b
echo absdf
)>abc.txt
这里就不明白了,以::开头的标签(或者注释)在下面就会出错,儿在a:之前就没问题。能否讲解下?你在CN-DOS上说有时间在讲解,所以没办法看明白。
Still with wax

TOP

回复 14楼 的帖子

我觉得什么跳进组合之类的说法确实不怎么恰当。不过仁兄这个帖子一针见血指出了问题的本质。这才是我想要的答案,我也完全弄明白了。之前你给的什么组合不组合的,即使可以了解也不能揪出问题的本质。对于我来说是知其然不知其所以然。现在看你这个帖子,从根本上明白了为什么在for里面用标签会出错,还是预处理。难怪,for有标签跳转的时候只执行一次,其实那只是表象,真正的是for命令已经被强制失效退出了,或者说整个标签段经预处理后已经不在for的语义里了。
再次感谢!
Still with wax

TOP

回复 14楼 的帖子

我这人比较直,性格所致,如果之前言语过激请见谅。
先看下面这个代码吧。
  1. @echo off
  2. (
  3. set "a=aaaaaa"
  4. echo,%a% 1
  5. goto a
  6. :a
  7. echo,%a% 2
  8. )
  9. pause
复制代码
大家都知道在一个复合语句里面给变量赋于新的值后并不能马上使这个变量得到这个新的值(或许这样说不对,因为变量确实已经得到这个新值了,只是不能马上显示出来而已),而只有开启环境变量延迟或是批处理进行下一次预处理时才能让变量显示新值。上面这个代码是个复合语句,第一次echo时,由于批处理的预处理,此时的%a%还是空的,但经过goto标签跳转后却是让%a%得到了它的新值。所以我在这大胆的推测,是不是可以把goto理解成从一个预处理跳出来转到下一个预处理呢?这样就可以好容易的解释为什么for里面发生第一次标签跳转就会终止循环,因为跳转后批处理已经进行下一个预处理了,先前对for的预处理已经结束,也就是说for命令结束,这就是为什么netbenton兄代码中第二个echo %%a显示不正确,其实它显示的是正确的,因为跳转后for命令已经结束,而脱离了for以后的%%a只能把它当作是字符串来看了。
以上是个人愚见,有不对的地方请高人指正。

[ 本帖最后由 zljzsmzzx 于 2009-7-30 10:02 编辑 ]

TOP

回复 19楼 的帖子

你说的是对的,我已经在18楼的帖子里说过了。
Still with wax

TOP

返回列表