bat enabledelayedexpansion
设置本地为延迟扩展。其实也就是:延迟变量,全称延迟环境变量扩展
@echo off set a=4 set a=5&echo %a% pause
结果:4
批处理运行命令的机制:批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。我们现在分析一下例1,批处理在运行到这句“set a=5&echo %a%”之前,先把这一句整句读取并做了预处理——对变量a赋了值,那么%a%当然就是4了
@echo off setlocal enabledelayedexpansion set a=4 set a=5&echo !a! pause
结果:5
@echo off setlocal enabledelayedexpansion for /l %%i in (1,1,5) do ( set a=%%i echo !a! ) pause
@echo off for /l %%i in (1,1,3) do ( set k=%%i echo %k% %%i )
执行这样的脚本,出现如下结果:
_1
_2
_3
结果出现这三句话。_ 表示空格
注:k没有赋初值,则替换为空。
@echo off set k=yyy for /l %%i in (1,1,3) do ( set k= %%i ::对k进行循环赋值 echo %k% %%i )
结果:
yyy 1
yyy 2
yyy 3
注:k有赋初值,则都替换为yyy。
@echo off setlocal enabledelayedexpansion set k= 3 for /l %%i in (1,1,3) do ( set k=%%i echo %k% %%i :: echo !k! %%i )
结果:
3 1
3 2
3 3
这里已经是用了延迟变量,但是在延迟变量扩展中,要使用!!来引用变量
@echo off setlocal enabledelayedexpansion set /a index=1 for /R %%s in (*.jpg) do ( if !index! LSS 10 ( rename "%%s" 00!index!.jpg ) else if !index! LSS 100 ( rename "%%s" 0!index!.jpg ) else ( rename "%%s" !index!.jpg ) set /a index=!index! + 1 ) pause

浙公网安备 33010602011771号