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