关于dos中环境变量扩展延时的解释与示例

引用:
https://www.cnblogs.com/minisculestep/p/4959612.html

1 环境变量扩展的定义

cmd在解释我们的命令的时候,首先会读取命令行一条完整的命令,然后对其进行一些命令格式的匹配操作,看你所输的命令格式是否正确。如果我们要在命令中引用一些变量,那么我们需要在变量的两边各加一个%号,使cmd在解释我们的命令的时候能够识别这个变量,例如%name%。当cmd读取我们的命令进行格式匹配的时候,就会发现name这个字符串两边各加了一个%,就不会把它当作普通字符串处理,而是把它当作一个变量处理,变量名就叫做name。然后cmd就会查找这个变量的值,用该值替换掉%name%,最后执行这个替换好的命令。这个替换的过程就叫做环境变量扩展。

2 环境变量扩展延时的解释

对于if、for这样的命令,可以将命令嵌套在括号里,所以一个完整的if命令可能包含多个需要执行的命令,但是cmd在解释这类命令的时候,会把它当作一条完整的命令,从而导致出现一些问题。

示例代码如下如下:

@echo off
set /a var = 0
for /l %%m in (1,1,5) do (
    set /a var = %%m
    echo %var%
)
pause

在这里插入图片描述
这是因为在命令执行之前,变量%var%便被进行了替换,导致嵌套在for命令里的操作没有体现出来。这时候,“延迟的环境变量扩展”的概念被提出来了。“延迟的环境变量扩展”,即每条命令在执行之后将变量进行替换,以保证对变量的任何修改都可以生效。

我们可以使用“setlocal enabledelayedexpansion”命令来开启延迟的环境变量扩展,需要注意的是启用后我们需要使用!name!来进行取值,而不能是%name%。

修改后的代码如下:

@echo off
setlocal enabledelayedexpansion
set /a var = 0
for /l %%m in (1,1,5) do (
    set /a var = %%m
    echo !var!
)
pause

在这里插入图片描述
能够看到此时执行结果已经变为正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值