快速业务通道

for 语句从入门到精通

作者 佚名 来源 批处理 浏览 发布时间 2013-07-09
forum/viewthread.php?tid=20733)说得直白一点,所谓的“变量扩展”,实际上就是很简单的这么一件事情:用具体的值去替换被引用的变量及紧贴在它左右的那对百分号。

  既然只要延迟变量的扩展行为,就可以获得我们想要的结果,那么,具体的做法又是怎样的呢?

  一般说来,延迟变量的扩展行为,可以有如下选择:

  1、在适当位置使用 setlocal enabledelayedexpansion 语句;
  2、在适当的位置使用 call 语句。

  使用 setlocal enabledelayedexpansion 语句,那么,[code19]和[code20]可以分别修改为:

@echo off
setlocal enabledelayedexpansion
set num=0&&echo !num!
pause

@echo off
set num=0
setlocal enabledelayedexpansion
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

  使用第call语句,那么,[code19]和[code20]可以分别修改为:

@echo off
set num=0&&call echo %%num%%
pause

@echo off
set num=0
for /f %%i in (''dir /a-d /b *.exe'') do (
set /a num+=1
call 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

  由此可见,如果使用 setlocal enabledelayedexpansion 语句来延迟变量,就要把原本使用百分号对闭合的变量引用改为使用感叹号对来闭合;如果使用call语句,就要在原来命令的前部加上 call 命令,并把变量引用的单层百分号对改为双层。 其中,因为call语句使用的是双层百分号对,容易使人犯迷糊,所以用得较少,常用的是使用 setlocal enabledelayedexpansion 语句(set是设置的意思,local是本地的意思,enable是能够的意思,delayed是延迟的意思,expansion是扩展的意思,合起来,就是:让变量成为局部变量,并延迟它的扩展行为)。

  通过上面的分析,我们可以知道:
  1、为什么要使用变量延迟?因为要让复合语句内部的变量实时感知到变量值的变化。
  2、在哪些场合需要使用变量延迟语句?在复合语句内部,如果某个变量的值发生了改变,并且改变后的值需要在复合语句内部的其他地方被用到,那么,就需要使用变量延迟语句。而复合语句有:for语句、if……else语句、用连接符&、||和&&连接的语句、用管道符号|连接的语句,以及用括号括起来的、由多条语句组合而成的语句块。最常见的场合,则是for语句和if……else语句。
  3、怎样使用变量延迟?
  方法有两种:
  ① 使用 setlocal enabledelayedexpansion 语句:在获取变化的变量值语句之前使用setlocal enabledelayedexpansion,并把原本使用百分号对闭合的变量引用改为使用感叹号对来闭合;
  ② 使用 call 语句:在原来命令的前部加上 call 命令,并把变量引用的单层百分号对改为双层。

  “变量延迟”是批处理中一个十分重要的机制,它因预处理机制而生,用于复合语句,特别是大量使用于强大的for语句中。只有熟练地使用这一机制,才能在for的世界中如鱼得水,让自己的批处理水平更上一层楼。很多时候,对for的处理机制,我们一直是雾里看花,即使偶有所得,也只是只可意会难以言传。希望大家反复揣摩,多加练习,很多细节上的经验,是只有通过大量的摸索才能得到的。Go

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

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号