for 语句从入门到精通
作者 佚名
来源 批处理
浏览
发布时间 2013-07-09
理的解释:为了兼容文件名中所带的空格或&。它在第5、6条语句中为什么还有存在的必要,我也不是很明白,这有待于各位去慢慢发现。 (七)变量延迟详解[2009.2.12更新] 变量延迟在for语句中起着至关重要的作用,不只是在for语句中,在其他的复合语句中,它也在幕后默默地工作着,为了突出它的重要性,本节内容在单独的楼层中发出来,希望引起大家的重视。 对于批处理新手而言,“变量延迟”这个概念很可能闻所未闻,但是,它却像一堵横亘在你前进道路上的无形高墙,你感受不到它的存在,但当你试图往前冲时,它会把你狠狠地弹回来,让你无法逾越、无功而返;而一旦找到了越过它的方法,你就会发现,在for的世界里,前面已经是一片坦途,而你对批处理的理解,又上升到了一个新的境界。 例如,你编写了这样一个代码: [code19] @echo off set num=0&&echo %num% pause 你的本意是想对变量num赋值之后,再把这个值显示出来,结果,显示出来的并不是0,而是显示:ECHO 处于关闭状态。 之所以会出错,是因为“变量延迟”这个家伙在作怪。 在讲解变量延迟之前,我们需要了解一下批处理的执行过程,它将有助于我们深入理解变量延迟。 批处理的执行过程是怎样的呢? “自上而下,逐条执行”,我想,这个经典的说法大家都已经耳熟能详了,没事的时候倒着念,也还别有一番古韵呢^_^,但是,我想问大家的是,大家真的深刻地理解了这句话的含义了吗? “自上而下”,这一条和我们本节的讲解关系不大,暂时略过不说,后一条,“逐条执行”和变量延迟有着莫大的干系,它是我们本节要关注的重点。 很多人往往认为一行代码就是一条语句,从而把“逐条执行”与“逐行执行”等同起来,这就大错特错了。 莫非“逐条执行”里暗藏着玄机? 正是如此。 “逐条”并不等同于“逐行”。这个“条”,是“一条完整的语句”的意思,并不是指“一行代码”。在批处理中,是不是一条完整的语句,并不是以行来论的,而是要看它的作用范围。 什么样的语句才算“一条完整的语句”呢? 1、在复合语句中,整个复合语句是一条完整的语句,而无论这个复合语句占用了多少行的位置。常见的复合语句有:for语句、if……else语句、用连接符&、||和&&连接的语句,用管道符号|连接的语句,以及用括号括起来的、由多条语句组合而成的语句块; 2、在非复合语句中,如果该语句占据了一行的位置,则该行代码为一条完整的语句。 例如: [code20] @echo off set num=0 for /f %%i in (''dir /a-d /b *.exe'') do ( set /a num+=1 echo num 当前的值是 %num% ) echo 当前目录下共有 %num% 个exe文件 dir /a-d /b *.txt|findstr "test">nul&&( echo 存在含有 test 字符串的文本本件 )||echo 不存在含有 test 字符串的文本文件 if exist test.ini ( echo 存在 test.ini 文件 ) else 不存在 test.ini 文件 pause 上面的代码共有14行,但是只有完整的语句只有7条,它们分别是: 第1条:第1行的echo语句; 第2条:第2行的set语句; 第3条:第3、4、5、6行上的for复合语句; 第4条:第7行的echo语句; 第5条:第8、9、10行上用&&和||连接的复合语句; 第6条:第11、12、13行上的if……else复合语句; 第7条:第14行上的pause语句。 在这里,我之所以要花这么长的篇幅来说明一行代码并不见得就是一条语句,是因为批处理的执行特点是“逐条”执行而不是“逐行”执行,澄清了这个误解,将会更加理解批处理的预处理机制。 在代码“逐条”执行的过程中,cmd.exe这个批处理解释器会对每条语句做一些预处理工作,这就是批处理中大名鼎鼎的“预处理机制”。预处理的大致情形是这 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于for 语句从入门到精通的所有评论