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

 

posted @ 2016-12-27 12:58  牧 天  阅读(541)  评论(0)    收藏  举报