快速业务通道

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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多
HTTP/1.1 401 Access Denied ww.lingzhong.cn/tech/35380.htm" title="Photoshop绘制高光水晶质感水晶苹果" target="_blank">Photoshop绘制高光水晶质感水晶苹果

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号