阿萌的程序小屋

萌物控重度患者与您一起畅游技术与梦想的世界

批处理bat代码之setlocal enabledelayedexpansion的作用

在前几天发表的利用批处理批量添加文件名前缀,后缀的文章里,我们用到了setlocal enabledelayedexpansion这个命令,本篇文章跟着阿萌来一步一步了解这个命令的作用。

setlocal enabledelayedexpansion解释过来也就是“延迟变量”,全称"延迟环境变量扩展"。

首先我们先了解下什么叫环境变量扩展:

在CMD 执行命令钱会对脚本进行预处理,其中有一个过程是变量识别的过程,会对其进行一些命令格式的匹配操作,看你输入的格式是不是符合他的要求。也就是对有两个%括起来的变量,如%strname%这样的变量,就会对其进行识别,并且查找这个变量所对应的值,再将值替换掉这个变量%strname%,这个替换值的过程,就是批处理如何识别一个变量的过程,也就是变量扩展的过程。

那么理解了环境变量扩展,那个延迟环境变量扩展又是什么呢:

其实问题主要出在类似于if、for %%i in (….)do(….)等这类的命令中,这类的语句都是将一些命令嵌套在里面执行,此时,如果我们在括号里面添加赋值这类命令的时候,就会出问题。

此时括号里的赋值会在一些情况下出现“赋值为空”或者“for循环中%%i in (….)”不起作用等这类的情况,这个时候,我们就必须提前利用setlocal enabledelayedexpansion来启用“延迟环境变量扩展”这个功能了。

在我们启用“延迟环境变量扩展”后,当CMD在解释含有嵌套格式的命令时,他会把嵌套的命令一条一条的执行一次,再进行匹配操作,这样就不会出错了,

再者需要注意的是,开启了延迟变量中的变量,也就是do后面括号里所赋值的变量,必须通过!!双感叹号来判断,也就是把“%”换成了“!”,这样才能使用启用“延迟环境变量扩展”后的变量。

如有朋友感觉我的博文或代码有问题,愿能给予我宝贵的意见!Thanks

另注:转载请随意,但请带上本文地址,万分感谢。

http://www.wangmengyu.cn/?p=496

这就是真的真的是传说中的公告牌的说~~
暂且努力发展中~~

性别:男  年龄:20岁
现居:江苏  南京  浦口区
标语:萌即是一切