┆ 回首页
 
站内资源搜索:
┆ 将本文寄给朋友  

学习批处理之延迟环境变量扩展

 

 


〖 作者:不详 〗〖 大小:2k 〗〖 发布日期:2010-03-20 〗〖 浏览:0 〗

所谓延迟变量扩展,实际上是指批处理运行命令时将变量扩展时机延迟到命令运行时,而不是加载时。

@echo off
set a=1
if %a%==1 set a=2 & echo %a%
pause


输出结果为:
1

原因是在 if 语句开始正式运行之前,批处理脚本引擎已经将该条语句扩展为

if 1==1 set a=2 & echo 1

为了避免%a%被过早扩展,我们就可以引入延迟变量扩展机制

@echo off & setlocal enabledelayedexpansion
set a=1
if %a%==1 set a=2 & echo !a!
pause

输出结果为:
2

上面例子中粗体的部分也可以看出延迟变量扩展的语法:
1. 使用 setlocal enabledelayedexpansion 启用延迟变量扩展
2. 用 !a! 来使用变量 a; 注意 %a% 仍可使用,但会被过早扩展,即使已经启用延迟变量扩展


@echo off & setlocal enabledelayedexpansion
set a=1
if %a%==1 set a=2 & echo %a%
pause

输出结果为:
1

除了上述用法之外,延迟变量扩展还可用于变量的嵌套,比如:

@echo off
set cd=5
set a=c
set b=d
echo %a%%b% ==> 输出 cd

要输出%a%%b%所指向的环境变量的值,就要启用延迟变量扩展

@echo off & setlocal enabledelayedexpansion
set cd=5
set a=c
set b=d
echo !%a%%b%!
==> 输出 5

下面是另外一个嵌套循环变量的例子

@echo off & setlocal enabledelayedexpansion
set a=abcdefghijk
for /l %%i in (1,1,10) do (
 cls
 echo !a:~0,%%i!
 ping 10 127.1 > nul
)
pause



来源: http://www.cppblog.com/bidepan2023/archive/2009/01/02/54561.html


 严禁发表涉及封建迷信、国家政治等敏感问题的内容
 ■ 对本文的评价(带 * 为必填内容,400字以内)    严禁发表涉及封建迷信、国家政治等敏感问题的内容。

* 您的姓名 
您的电子邮件 
您的个人主页 

*
您的评价 

     

 ■ 以往的评价







以上文章版权由原作者所有。未经同意,不得将其任何一部分复制、转载、发布等未授权操作。


Java学习室 — 陈伟波个人主页
E-mail: zz3zcwb@sina.com
COPY RIGHT 2005