Board logo

标题: [原创]变量延迟详解(新手推荐) [打印本页]

作者: nforce1     时间: 2007-3-9 08:52    标题: [原创]变量延迟详解(新手推荐)


因工作关系一直没有太多时间泡在论坛上,每次上本论坛都很匆忙,注册几个月以来第一次发贴(因为本人太菜,不敢发帖),真有点不好意思!希望大家多多支持!
本帖只“照顾”新手,老鸟略过,哈!

以下是偶根据论坛内的帖子得出的结论,如有错漏敬请指正!
首先要特别感谢willsort老大写的这帖子,偶是从中得到启发的!
http://www.cn-dos.net/forum/viewthread.php?tid=20733

下面在讨论过程中,偶会插入一些“废话”,如果你不喜欢看我写的“废话”,可以跳过。它与本文讨论的中心完全无关!不过偶还是建议大家看看,哈!

这段可跳过:

同学们上课啦,第一天来这里任教,必须先做个自我介绍。偶叫金城武,啊啊~~~~~~不,不是,一时口快说错了, 偶姓贾,不好意思!由于近日忙于研究“鬼武者”,所以忘了自己的姓氏!什么,说我现在才玩鬼武者,哎!没办法啊,偶穷啊,口袋里总是掏不起这几块钱买啊。“几块钱?”众人议论纷纷。什么,又说我买盗版,啊~~啊~~~这~~这不在本文的讨论范围啊~~~~~说完台下众人举起砖头……^_^

这是正文不可跳过:

willsort老大上面的帖子,对于新手来说比较难理解。不过没关系,我们先分析一个例子,同样是引用willsort老大的。本例启用了变量延迟,是个正确的例子!
例1:
@echo off & setlocal EnableDelayedExpansion
for /f  "tokens=* delims=" %%i in ("Hello world.") do (
    set n=%%i
    set n=!n:ld.=t!
    set n=!n:o w= S!
    set n=!n:He=Wi!
    echo !n!
)
pause
将上面代码保存为.bat双击执行后会显示“Will Sort”字符串,下面将讲解每个语句的意思:
1.@echo off & setlocal EnableDelayedExpansion
关闭命令回显,并启用变量延迟

2.for /f  "tokens=* delims=" %%i in ("Hello world.") do (
for命令及其参数的使用,请大家在论坛里搜索相关字眼。限于篇幅问题,这里不作讨论。如果此时你不明白它的意思,那么你就当它的作用是把字符串“Hello world.”赋值给%%i好了,当然这只是权宜之计,以后一定要学习for的使用!

3.set n=%%i
把%%i的值(即Hello world.)赋予给变量n,这个大家都知道吧

4.set n=!n:ld.=t!
这里要讲讲set替换字符的功能了。这个语句的意思是,先获取变量n的值(此时n的值是“Hello world.”),然后将字符“t”替换字符“ld.”,然后再将替换后的结果再次赋值给变量n(此时n的值变为“Hello wort”)。至于set替换字符的编写格式,大家可以在CMD键入“set/?”找到“%PATH:str1=str2%”这段有说明

5.set n=!n:o w= S!
意思和上句一样,只是替换和被替换的内容不同。它是将“ S”替换“o w”(注意S前面和w前面都有个空格),其实willsort老大是想证明set替换字符是支持句点和空格的(第4句“ld”后面有个.)。此时n的值为“Hell Sort”

6.set n=!n:He=Wi!
这句不用说了吧,执行完这句后n的值为“Will Sort”

7.echo !n!
显示变量n的值

需要注意的是,一旦启用了变量延迟,就要用!号把变量括起来,而不能用%号。

好了,每句的意思已经说完了,下面要讲本帖真正要讨论的变量延迟的问题。

这里又要引用Will Sort老大的说明:当CMD读取for语句时,其后用一对圆括号闭合的所有语句将一同读取,并完成必要的预处理工作,这其中就包括环境变量的扩展,所以在for中的所有语句执行之前,所有的环境变量都已经被替换为for之前所设定的值,从而成为一个字符串常量,而不再是变量。

而为了能够在for语句内部感知环境变量的动态变化,CMD设计了延迟的环境变量扩展特性,也就是说,当CMD读取了一条完整的语句之后,它不会立即执行变量的扩展行为,而会在某个单条语句执行之前再进行扩展,也就是说,这个扩展行为被“延迟”了。

总的来说是,在没有启用变量延迟的情况下,凡是在括号内(即do里面)的变量,在执行for语句之前,就已经被替换成for语句之前其它命令对该变量所赋予的值。这句话不懂没关系,下面再看一个例子,看完你就会明白。
例2:
@echo off
for /f  "tokens=* delims=" %%i in ("Hello world.") do (
set n=%%i
set n=%n:ld.=t%
set n=%n:o w= S%
    set n=%n:He=Wi%
    echo %n%
)
pause
这和前面的例子差不多,只是所有!号都换成%号,这是个错误的例子。因为它没有启用变量延迟,也没有使用!号把变量括起来。我们看到它的执行结果是显示“ECHO 处于关闭状态”。

为什么会这样呢?原因是,在没有启用变量延迟的情况下,凡是在括号内(即do里面)的变量,在执行for语句之前,就已经被替换成for语句之前其它命令对该变量所赋予的值。
则是说在本例中的以下几句
set n=%%i
set n=%n:ld.=t%
set n=%n:o w= S%
set n=%n:He=Wi%
echo %n%
第一句能正常执行并达到它的目的,因为它只是单纯地将%%i的值赋予给变量n,所以没有任何问题。其它几句属这样情况:早在for语句执行前,CMD就急不切待地将这几句里面的所有变量n一同执行替换行为,替换为for之前,其它命令对n所设置的值,从而使n变成一个常量。但在本例中,for语句之前只有@echo off这句,并没有其它命令对n作过任何赋值行为,所以在for之前,变量n的值为空值。即是说,set n=%n:ld.=t% 这句里面的变量n,在CMD读取(注意是读取不是执行)完整个for语句后(这时还未轮到set执行自己的任务),就立刻被替换为一个空值,一个空值里面没有任何东西,所以就不存在一字符替换另一字符这种说法(没有东西怎么替换?)。最终到执行set n=%n:ld.=t%语句时,它只是获取一个空值,再给变量n赋予空值而已。其它几句也是一样原理。

所以,最后echo %n%的时候变量n还是个空值,而echo命令没有东西可以显示,就只有显示“ECHO 处于关闭状态”这句来说明自己的状态

通过这个例子的说明,相信大家已经知道变量延迟的作用吧!我们再回头来看看例1。
启用变量延迟后,在执行
set n=!n:ld.=t!
set n=!n:o w= S!
set n=!n:He=Wi!
echo !n!
这些语句前,它们里面的变量n不会马上被CMD替换(启用延迟后,CMD变得有耐性啦^_^),而未被替换的话,那么n就还是变量,而不是常量。等到执行set n=!n:ld.=t!等这几句时,变量n才被替换。这样每个set命令都能感知变量n的任何变化,从而作出正确的替换行为。这就是变量延迟啦!

可跳过:

什么,说我讲得不好?没办法啊,因为偶太菜啊,只知道这些。偶只是淘两顿饭吃而已,望大家谅解啊,不要再拿砖头砸偶。。。不然偶就~~~~~~~~~~叫救命!^_^

这是正文不可跳过:

不要以为只有for才要用变量延迟,下面这个例子同样需要
例3:这是个错误的例子
@echo off
set mm=girl&echo %mm%
pause
执行后依然显示“ECHO 处于关闭状态”。
原因是没有启用延迟,而且在set mm=girl&echo %mm%语句前没有其它命令对mm进行赋值。这时当CMD执行set mm=girl&echo %mm%语句前,就已经急不切待地把变量mm的值替换了,而又因为前面没给mm赋值,所以mm被替换为空值,变成常量。等到echo命令执行时,它其实是echo一个不会变化的常量,本例中即是空值。

有人会问,echo前面不是给mm赋值了吗?
这个就要关系到CMD解释命令的步骤,大家可以参详本帖开头willsort的帖子。
总的来说是,如果不启用变量延迟,在本例中,echo是不会理会也不会知道,它前面(指同一行语句)是否有其它命令给mm赋值。它只会从set mm=girl&echo %mm%这句以上的语句中获取它所要显示的变量的内容,也就是说,上一行或上几行的命令将mm设置成什么值,echo命令就显示什么值。
大家这样做就明白了:
@echo off
set mm=boy
set mm=girl&echo %mm%
pause
看看显示什么结果就知道了!

这样编写例3才正确:
@echo off&setlocal EnableDelayedExpansion
set mm=girl&echo !mm!
pause
开启了变量延迟,变量扩展(替换)的行为就推迟到echo命令执行时,这时echo能感知它前面的命令(本例的set)对变量mm做了什么“坏事”,从而作出正确的判断并执行

好了全篇完了,下课!

突然,门外传来几只“恐龙”的嚎叫声:把那小子抓回去,胆敢趁着节日咱们游山玩水的时候偷走!!
2分钟后,“恐龙战队”押着这小子来到一个美丽壮观的“城堡”面前,正门上方写着“XX疯人院”,哈哈!

愿天下美女妇女节快乐,一天比一天美(包括在浏览本贴的你)!!---汗,这里有女同胞吗??有的请举手!呵呵!39们也一起感受节日的气氛吧!
这帖本来是想上午发的,但因工作关系,到现在才有空,无奈啊!
以上这些“废话”只是想令大家阅读这贴时能增添几分气氛,增加大家的阅读兴趣,令大家在学习过程中轻松轻松而已。如有得罪,敬请批评指正!

[ Last edited by nforce1 on 2007-4-2 at 09:26 AM ]
作者: electronixtar     时间: 2007-3-9 09:47
顶,沙发
作者: oilio     时间: 2007-3-9 09:52
呵呵,是写给新手看的,支持你一下。写这么多也不容易。
作者: nforce1     时间: 2007-3-9 09:58
好不容易发帖,忘了自己顶一个~~!哈
谢谢electronixtar与 oilio两位前辈的支持!!
作者: ieutk     时间: 2007-3-9 11:44
谢谢楼主,这样的贴子对新手最好了,新手有福啦!
作者: namejm     时间: 2007-3-9 11:57
  写得不错,对新手会很有帮助,收入经典帖子索引。
作者: bbq123bbq     时间: 2007-3-9 16:58
收藏拉
作者: liujunhjl     时间: 2007-3-9 18:39
写的真不错,就是太长了,就怕看不懂,不过还是不错的,顶!!!!!
作者: xycoordinate     时间: 2007-3-9 23:01


  Quote:
这里又要引用Will Sort老大的说明:当CMD读取for语句时,其后用一对圆括号闭合的所有语句将一同读取,并完成必要的预处理工作,这其中就包括环境变量的扩展,所以在for中的所有语句执行之前,所有的环境变量都已经被替换为for之前所设定的值,从而成为一个字符串常量,而不再是变量。

而为了能够在for语句内部感知环境变量的动态变化,CMD设计了延迟的环境变量扩展特性,也就是说,当CMD读取了一条完整的语句之后,它不会立即执行变量的扩展行为,而会在某个单条语句执行之前再进行扩展,也就是说,这个扩展行为被“延迟”了。

总的来说是,在没有启用变量延迟的情况下,凡是在括号内(即do里面)的变量,在执行for语句之前,就已经被替换成for语句之前其它命令对该变量所赋予的值。这句话不懂没关系,下面再看一个例子,看完你就会明白。

21世纪最缺什么?
。。。。。。

道理很多人都知道,但是能够说明白,让更多的人知道,
一个字:难!
作者: nzisisco     时间: 2007-3-9 23:49
好耶````适合我这种新手看
作者: sbyguli     时间: 2007-3-10 10:44
好帖子啊~谢谢楼主的分析!
作者: shuaigeya     时间: 2007-3-10 21:04
精彩 学习了
作者: htysm     时间: 2007-3-12 22:40
偶喜欢楼主.强.DOS联盟有福了.
作者: willsion     时间: 2007-3-13 01:41
帖子不错,学习了。
作者: willsion     时间: 2007-3-13 01:44
另外,有个疑问,不知道变量延迟是否有副作用,如果没有副作用的话
,那每个程序头干脆插上setlocal EnableDelayedExpansion语句了。就象
@echo off一样。
作者: namejm     时间: 2007-3-13 02:17
  副作用是有的,比如会把变量值中的半角感叹号抛弃,其他的副作用暂时还没观察到,有待各位去发现。
作者: willsion     时间: 2007-3-13 03:45


  Quote:
Originally posted by namejm at 2007-3-13 02:17 AM:
  副作用是有的,比如会把变量值中的半角感叹号抛弃,其他的副作用暂时还没观察到,有待各位去发现。

请问其有没有一个其作用范围,假如其在一个for ( )内部定义,是否只在for()内起作用。如果这样的话,就能减少一些可能引起的副作用了。
作者: namejm     时间: 2007-3-13 06:53
  setlocal 的含义是使变量本地化,当它碰到第一个 endlocal 语句的时候,结束这个本地化的过程,所以,如果在 for () 内部定义的话,如果不在合适的位置加上 endlocal 语句,则 setlocal enabledelayedexpansion 语句始终会起作用。

  另外,超过32层的 setlocal 语句会产生"已经达到最大的 setlocal 递归层"的错误,而解决这个问题的手段之一,就是在执行第33个 setlocal 语句前用 endlocal 语句来结束变量的本地化过程。
作者: userlzx     时间: 2007-3-13 15:28
说的很细。。有点懂了。。谢谢~~~
作者: hxmupdata     时间: 2007-3-14 21:58
LZ很幽默,讲了不少东西,斑竹也补充的很多.........................
作者: dglsy     时间: 2007-3-15 21:40
真是太感谢了!谢谢楼主
作者: wei7120     时间: 2007-3-16 00:19
谢谢!
作者: nforce1     时间: 2007-3-16 23:20
感谢大家的支持,偶今天才有空逛逛这里。呵呵!
特别谢谢namejm版主对大家的指导。偶也学习啦!!
作者: wxjlotus     时间: 2007-3-17 11:41
我今天终于搞明白了,哈哈哈哈!多谢多谢!!!
作者: cy123     时间: 2007-3-18 09:44
记号
作者: Billunique     时间: 2007-3-22 11:36
你表达得这么清晰,真是佩服啊~学习、学习!
作者: chenall     时间: 2007-3-22 13:10
很不错,希望楼主再写一些类似的文章,让新手更容易理解.
作者: nforce1     时间: 2007-3-24 01:23


  Quote:
Originally posted by chenall at 2007-3-22 12:10 AM:
很不错,希望楼主再写一些类似的文章,让新手更容易理解.

偶也希望可以,只不过偶是心有余而力不足(别想歪啊~~呵)
太忙啦,偶有时间都只能休息了!
其实论坛内高手如云,随便请教任何一个都受益非浅啊!
有时间一定会再写!其实偶也是菜鸟啊!!哈哈!
作者: swallow     时间: 2007-3-26 08:36    标题: 感谢!

这两天正为setlocal EnableDelayedExpansion这个命名犯愁呢,今天看到你的帖子,茅塞顿开,太感谢了。
作者: stornager     时间: 2007-3-31 04:16
好样的 ,希望楼主多发贴子让我们新手学习.(:)(:)
作者: lililulula     时间: 2007-3-31 04:37
不错 学到了 终于明白 延迟变量的意思了
作者: fd2000     时间: 2007-4-2 12:44
先粗略的看了一下,留个名,有时间再好好学学!
作者: fd2000     时间: 2007-4-2 13:17


  Quote:
它是将“ S”替换为“o w”(注意S前面和w前面都有个空格)

是不是错了?
将“o w”替换为“ S”  应该这样吧?
作者: nforce1     时间: 2007-4-2 22:18


  Quote:
Originally posted by fd2000 at 2007-4-2 12:17 AM:

是不是错了?
将“o w”替换为“ S”  应该这样吧?

不好意思,是错了,呵!写作语法错误,把”为“字删除就可以了~

[ Last edited by nforce1 on 2007-4-2 at 09:25 AM ]
作者: twotwo789     时间: 2007-4-3 02:55
偶喜欢楼主.强.DOS联盟有福了. 学习了。
作者: myth126     时间: 2007-4-3 08:51
真不错!正在找这方面的呢!顶!!!!
作者: tommy725     时间: 2007-4-3 09:20
学了很多,谢谢
作者: shaqiu     时间: 2007-4-7 06:25
一直都在被这个困扰~
作者: logictianjin     时间: 2007-4-10 19:13    标题: 为什么这个错误的例子我测试却没问题呢?

CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

@echo off
set mm=girl&echo %mm%
pause


为什么文中的这个例子在我测试的时候总是能正确显示 girl 呢?而作者说这个例子因为是错误的所以会显示 ECHO 处于关闭状态

[ Last edited by logictianjin on 2007-4-10 at 06:15 AM ]
作者: nforce1     时间: 2007-4-10 22:39


  Quote:
Originally posted by logictianjin at 2007-4-10 06:13 AM:
CODE:  [Copy to clipboard]
--------------------------------------------------------------------------------

为什么文中的这个例子在我测试的时候总是能正确显示 girl 呢?而作者说这个例子因为是错误的所以会显示 ECHO 处于关闭状态

请把这个例子保存为.BAT文件,双击运行~!例如TEST.BAT
这里讨论的是批处理的变量延迟,你应该是打开CMD窗口后在里面输入这个示例代码,才会出现你说的这种情况!

[ Last edited by nforce1 on 2007-4-10 at 09:42 AM ]
作者: testdamao     时间: 2007-4-20 02:25
不错啊,谢谢楼主了
作者: tongwandou     时间: 2007-4-22 05:36
好贴,学习了!
作者: senjieg     时间: 2007-4-27 09:45    标题: 好东西

好东西,找了很久了
作者: xixi27     时间: 2007-4-29 07:06
辛苦楼主!
学习了,谢谢!
作者: ccuu668     时间: 2007-5-2 15:21
LZ.强呀!扫盲贴.比较适合我们这些盲人.呵呵.
作者: zqdarkday     时间: 2007-5-6 18:19
要是以后能多一点这些文章就好了
作者: nicesoft     时间: 2007-5-6 18:52
万分感谢与感动中……
作者: xuxinxiangxue     时间: 2007-5-31 11:18
顶一下!不错。。。。。我是新手,受用不尽。。。。。:D
作者: swiftwhite     时间: 2007-6-5 02:56
读懂这篇文章还真是要废不少力气啊
感觉楼主有点把简单的事说复杂了
作者: yong119     时间: 2007-6-5 11:38
支持原创,给你加分虽然只一点点,嘿嘿
作者: kucool     时间: 2007-6-10 16:09
找到答案,找到个好论坛。hoho
作者: bbq5201     时间: 2007-8-23 14:27
这不是转贴吗?
作者: bbq5201     时间: 2007-8-23 14:27
这不是转贴吗?

但也谢谢..
辛苦了
作者: wpclub     时间: 2007-8-24 00:43


  Quote:
Originally posted by swiftwhite at 2007-6-5 02:56 AM:
读懂这篇文章还真是要废不少力气啊
感觉楼主有点把简单的事说复杂了

同意。其实问题远没有这么复杂的
作者: nforce1     时间: 2007-8-24 14:02


  Quote:
Originally posted by wpclub at 2007-8-24 12:43 AM:


同意。其实问题远没有这么复杂的

本人还是菜鸟.写得不好.请不要介意.还望指教!
确实.变量延迟就那么几句话就可以概括.
但是要让还不明白朋友理解变量延迟的意思..就需要写那么一大段解释..
我就是怕有些朋友不明白.所以喽唆了一点..让懂得变量延迟的朋友.看起来过于复杂.
否则大家都不需要老师啦..自己买书自学东西不就可以了吗?就因为有些书本上的东西写得不够详尽..所以还需要老师的指导.
作者: nforce1     时间: 2007-8-24 14:05


  Quote:
Originally posted by bbq5201 at 2007-8-23 02:27 PM:
这不是转贴吗?

但也谢谢..
辛苦了

这个是我原创的哦.呵呵..只在DOS联盟发布过.在其它地方看到的..就是别的朋友转贴啦
作者: xx12212     时间: 2007-10-2 17:22
写得太好了,谢谢楼主.
作者: netchxing     时间: 2007-10-2 20:37
写得太好了,我明白了,谢谢楼主.
作者: lzmuhioin     时间: 2007-10-3 15:52
一直没有搞懂变量延迟这个问题,看过楼主的一简文,实在感谢!
作者: nsnicy     时间: 2007-10-5 21:06
受教了..
作者: kgdetg1127     时间: 2007-10-12 22:27
感动,,顶上去!!!!
作者: jgh     时间: 2007-10-15 21:34
好东西
作者: 06403213     时间: 2007-10-20 02:43
看了那么多关与变量延迟的帖子,就这篇看懂了,讲的好,把电脑是怎么运转的,说的很详细.作为菜鸟,恳切希望更多高手能够这样讲解...
作者: shtcool     时间: 2007-10-29 11:44
很不错。谢谢!
作者: hongying915     时间: 2007-11-7 22:55
有福了
作者: cliden     时间: 2007-11-10 02:21
学习了,多谢!!
作者: vlem     时间: 2007-11-14 09:11
深深的学习中!
多谢楼主
作者: Li103Z     时间: 2007-11-17 15:26
解释得很好,不错,顶你一下
作者: 745522988     时间: 2008-1-7 12:07
还是不知道什么时候该用变量延迟
作者: moniuming     时间: 2008-1-8 23:46
终于懂一些了
是不是set str=!str:*:=!这句的意思就是把*:的值替换为空了,对吗
作者: zhct     时间: 2008-1-9 01:06
强帖!学习中。
感谢LZ辛勤劳动!!
作者: asnahu     时间: 2008-1-12 20:38
论坛里的大师太多,但却缺乏真正好的老师
在论坛里呆了这么久,第一次发现有这么好的帖子
作者: freeflay     时间: 2008-1-17 11:06
可算知道了
作者: enjoyer     时间: 2008-1-17 19:32    标题: 顶起!

好贴回头看
作者: mggdx     时间: 2008-1-30 00:56
很好~~~~~~
作者: plikefly     时间: 2008-2-19 12:20
真是受教啊,也看了will Sort的帖子
好东西,这回可算理解了变量扩充了
谢啦
作者: windowsxphao     时间: 2008-3-11 10:46
楼主辛苦了,对我等新手很有用的帖子,必须支持一下下
作者: 5872169     时间: 2008-3-11 10:48
收藏了,谢谢楼主
作者: bat-zw     时间: 2008-3-11 11:06


  Quote:
Originally posted by willsion at 2007-3-13 01:44:
另外,有个疑问,不知道变量延迟是否有副作用,如果没有副作用的话
,那每个程序头干脆插上setlocal EnableDelayedExpansion语句了。就象
@echo off一样。

应该是有副作用的,我有次写代码时就遇到了(是本人不小心犯的错),如下:
:begin
@echo off&setlocal EnableDelayedExpansion
.........................................
........................................
..........................................
goto begin
本来:begin 是要放在‘@echo off&setlocal EnableDelayedExpansion’后面的,结果运行一段时间后,总是显示表明setlocal己到了最大限定值(原文不记得了),P中的变量延迟也出现错误和无效。由于本人水平有限,叙述到此,请大家多多发表自己的意见了(目的:共同学习和提高)。
作者: dslz666     时间: 2008-3-18 19:53
谢谢楼主,看了你得贴子。又懂了不少。
作者: zsj008od     时间: 2008-3-19 19:01
刚好解决我现在的问题:)谢谢
之前在for中应用
set /a n=%%f
set /a m=n/16
set /a o=n%16
...
不能到达正确结果,现在好了:)
作者: vivifier0923     时间: 2008-4-9 23:37
好东西啊。
作者: gao123     时间: 2008-4-10 14:36    标题: en

bu cuo
作者: jipinshangren     时间: 2008-4-11 10:41
谢谢班主了,我好像懂一点了!不知道是不是说,那些延迟就是使得echo等附值语句有效,不会因为cmd的运行命令使赋值能够完成!还望班主指点一二!
作者: tswcbyy     时间: 2008-4-11 13:59
新手 ,不错。谢谢
作者: joyn     时间: 2008-5-6 23:50    标题: 经典~~

我一直在雾里排徊~~现在终于可以找到出路了~~~
太经典了~~
太感谢了
作者: stance     时间: 2008-5-7 18:22
非常感謝樓主!

講解很清晰,辛苦辛苦~~~
作者: jia332     时间: 2008-5-23 16:15
十分感谢楼主困扰我2天的问题终于解决了
对论坛也表示感谢
作者: hansom     时间: 2008-5-28 00:36
up upup up
作者: wgx1688     时间: 2008-7-11 14:36
====我要看好一阵才能有点......
作者: clovetree     时间: 2008-7-18 03:44
不错,学习了
作者: clovetree     时间: 2008-7-18 03:44
不错,学习了
作者: goldharp     时间: 2008-7-21 07:53
太赞了 学习~
作者: 523066680     时间: 2008-7-21 07:57
为什么帖子的末端总是这些留言呢……郁闷
作者: woods     时间: 2008-8-19 23:09
新手有福啦!
作者: woods     时间: 2008-8-19 23:11
新手有福啦!
作者: a794685135     时间: 2008-8-25 21:37
终于知道变量延迟了,以及怎么用,非常感谢 !
作者: qq152576450     时间: 2008-8-26 10:20
好东西~!
:lp
echo 顶&收藏&学习
goto lp
作者: slw218856     时间: 2008-8-27 22:26
还是配合列子来讲说,容易理解.

楼主适合当老师,讲得很清楚,我初学都能看懂.

顶,这样的好贴子.

我有时候来找代码的,但我更相信大部分的人是想来学习的

可无奈呀,新手不懂的太多,只能遇到什么解决什么

有时候通过别人的代码,能学习到没见过的东西,这样为代码而来

其实已经有收获了.

楼主,我授教了..希望以后多给我们上上课.
作者: whitegod     时间: 2008-8-28 13:04
人才呀,喊你一声,高手
作者: 2162319     时间: 2008-9-3 23:19
收藏一个,谢谢楼主
作者: 2162319     时间: 2008-9-3 23:19
收藏一个,谢谢楼主
作者: alwaysrun     时间: 2008-9-27 13:38
不错,学习了
作者: aeihua     时间: 2008-9-28 14:58
原来学习真的是一点一滴的学起来的,呵呵。
作者: aeihua     时间: 2008-9-28 14:59
原来学习真是一点一滴学起来的,呵呵。不容易啊。学的不容易,讲的也不容易。
作者: xjf88365     时间: 2008-9-28 16:26
帖子不错,学习
作者: xie1986214     时间: 2008-11-2 11:08
thank!
看懂了很多 .... 明白了 变量延迟 经常用在FOR和SET 的语句中 其他地方还会用到吗? 例如?...
作者: wishpopo     时间: 2008-11-7 22:30
好帖子

收藏一下
作者: pigpigs     时间: 2008-11-11 14:40
像楼主这样的好人,这世上已经不多了。
作者: pigpigs     时间: 2008-11-11 14:40
像楼主这样的好人,这世上已经不多了。
作者: iyou     时间: 2008-11-11 16:03
我是初学者,谈谈我的理解。set mm=girl&echo %mm%, set mm=girl这句话和echo %mm%是同时进行的,不分先后,所以echo %mm% 时的mm没有赋值,如果在这句话后再加个echo %mm%结果就显示girl了
作者: nacydu2008     时间: 2008-12-19 10:28
今天有收获,谢谢啦