在for循环里,set的变量无效?
例子
for /l %%i in (1,1,5) do (
set var=%%i
echo %var%
)
pause
什么是延迟环境变量扩展呢?
cmd执行bat的机制:cmd是读一句执行一句,何谓一句?
for
, if
的整句,&
、&&
、||
等由连接符连接的整行,()
圆扩符之间的代码…都叫一句。cmd读一句后先不会执行,而会预处理该句子,所谓预处理就是为执行作一下准备工作,检查代码是否合法,替换%%包含的变量,特殊符号的处理等。此时,如果我们如果在括号里面嵌入一些设置变量值的命令,就会出现问题了!启用”延迟环境变量扩展”
Setlocal enabledelayedexpansion
然后将 %var%
替换成 !var!
例子
@echo off
Setlocal enabledelayedexpansion
::CODER BY dsw POWERD BY iBAT
for /l %%i in (1,1,5) do (
set var=%%i
echo !var!
)
pause