批处理命令 / 延迟环境变量扩展

@time    2019-07-09
@author  Ruo_Xiao

1、变量扩展

        当写一个 bat 脚本时,解释器会读取命令行完整指令,若解释器发现指令里面有变量时,需要对变量进行替换,那么识别变量的方法就是用“%”将变量括起来。替换之后,再进行指令的匹配操作,最后执行命令。

        整体过程为:

        (1)读取完整指令。

        (2)对变量进行替换。

        (3)匹配指令。

        上述的第2步就是变量扩展步骤,也就是解释器识别变量的步骤。

栗子:

@echo off

set var=50
echo %var%

变量扩展完之后,实际显示的命令为

echo 50

 

2、延迟环境变量扩展

         上述操作对于 echo 等其他单行指令是有效的,但是对于嵌套指令来说就有问题,如下栗所示:

@echo off

for %%i in (1,1,3) do (
set var=%%i
echo %var%
)

结果如下所示:

       原因是 Bat 解释器将整个 for 语句当做一条完整的指令,进行变量扩展时,会将 “set var=%%i” 变为 “set var=”,因为 for 语句之前,i 变量并没有赋值,所示只能给 var 赋值为空。最后的 “echo %var%” 就变为 “echo   ”,那么只能显示 echo 的开关状态了。

       为了解决上述问题,Bat 增加了延时环境变量扩展的功能,该功能的作用就是延时变量扩展,先将 for 语句中各个指令执行一遍,再进行变量扩展,从而实现了代码结果的正常化。

       增加延时环境变量的指令为:

setlocal enabledelayedexpansion

……

endlocal

       两条指令之间的命令中,变量用 “!” 包起来来表示。

 

(SAW:Game Over!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值