延迟环境变量扩展的作用
延迟环境变量扩展 setlocal enabledelayedexpansion 的作
延迟变量全称"延迟环境变量扩展",要理解这个东西,我们还得先理解一下什
么叫扩展!
CMD 在解释我们的命令的时候,首先会读取命令行一条完整的命令,然后对
其进行一些命令格式的匹配操作,看你所输入的命令格式是不是符合他的要求.
如果我们要在我们的命令中引用一些变量,那么我们如何让 CMD 在解释我
们的命令时,能识别出这个变量呢?这时我们就可以在变量名字两边加一个%号,
如%name%.当 CMD 在对读取我们的整行
命令进行格式匹配的时候,就会发现 name 这个字符两边加了%号,就不会把
他当作普通字符处理,
而是会把他当作一个变量处理,变量名叫 name!然后 CMD 就会找到变量名
对应的值,用变量名的值替换掉这个变量名字(name),(如果变量名不存在值,就返
回空值).再将这个替换好并且匹配的命令执行!这个替换值的过程,就叫做变量扩
展,说白了就是把变量的名字,用他的值给替换掉后执行!也就是批处理如何识别
一个变量的过程.
(注意:这里只是变量的扩展的意思,不是延迟环境变量扩展,要理解延迟环境
变量扩展,必须先理解什么是变量的扩展) 也就是批处理如何识别一个变量的过
程. ~_~
例如这个一个 BAT
set var=test
echo %var%
CMD 在读取到 echo %var%这句命令后,就会进行匹配操作,它马上就发现
var 字符两边有%号,这时他就会把他当作一个变量处理,查看这个 var 变量名是
不是有值,如果有就用他的值把变量名 var 给替换掉,这里我们的 VAR 在上一条
命令 set var=test 中,给 var 赋值为 test,所以他会用 test 把%var%这个变量名替
换掉,替换后的结果就为 echo test 了.这些步骤都是 CMD 进行匹配操作的步骤,
匹配完后,他再执行 echo test 这条语句,这时我们的 CMD 中就会 echo 出一个
test 了.
评论0