批处理问题,什么是延迟变量,求高手详细解释!

 我来答
yyykkkyyyy
2013-11-02 · TA获得超过3136个赞
知道大有可为答主
回答量:2691
采纳率:40%
帮助的人:3268万
展开全部
bat批处理执行时会逐条命令预处理再执行,但这逐“条”是指完整的一条即如果有括号括起来的多行或用连接命令符连接起来的各子命令一起作为一个处理单元,预处理时会把%VAR%之类的变量处理成这个处理单元之前变量的值 在CMD帮助信息里称作“扩展”例如:
set a=1
if %a% equ 1 set a=2&echo %a%
对于第二条命令预处理成
if 1 equ 1 set a=2&echo 1
但是我希望它不要这么快把后面的%a% "扩展"成原来的值1 而希望是执行set a=2 命令执行后再“扩展”成2 这就是延迟变量扩展(注意不是你说的延迟变量)为此可以写成
setlocal enabledelayedexpansion
if %a% equ 1 set a=2&echo !a!
参见set/?和setlocal/?
万山数据
2024-11-14 广告
北京万山数据科技有限公司,反向治理破解数据治理投入大见效慢的难题;DG4L湖仓一体数据;治理平台让数据变成资产;Clickhouse专家服务、Clickhouse升级服务,Clickhouse应用无忧... 点击进入详情页
本回答由万山数据提供
flylzy2012
2019-12-19 · TA获得超过331个赞
知道答主
回答量:123
采纳率:100%
帮助的人:31.6万
展开全部
变量延时问题现象,是对一条复合语句而言的
批处理代码,你观察一下如下现象:

1、未开启变量延时
set str=AAA
if %str%==AAA (
    set str=BBB
    echo %str%
)
    echo %str%
运行结果是:
AAA
BBB
2.开启变量延时后
setlocal enabledelayedexpansion    ::开启变量延时功能
set str=AAA
if %str%==AAA (
    set str=BBB
    echo !str!   ::得用一对!!号
    echo %str%   ::还是一对%%号
)
    echo !str!
    echo %str%
运行结果:
BBB 
AAA
BBB    
BBB 

即,一条复合语句,对变量的解释动作是同时进行的,第二次赋值动作在时间上,其实是晚了一步,来不及,被抢先了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-02
展开全部
太多了,太好要整理,然后处理。
追问
????
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式