批处理问题,什么是延迟变量,求高手详细解释!
展开全部
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/?
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 广告
2024-11-14 广告
北京万山数据科技有限公司,反向治理破解数据治理投入大见效慢的难题;DG4L湖仓一体数据;治理平台让数据变成资产;Clickhouse专家服务、Clickhouse升级服务,Clickhouse应用无忧...
点击进入详情页
本回答由万山数据提供
展开全部
变量延时问题现象,是对一条复合语句而言的
批处理代码,你观察一下如下现象:
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
展开全部
太多了,太好要整理,然后处理。
追问
????
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询