Loading

为什么我的bat脚本for循环语句里面的值不会自增?

如果你曾经写过这样的代码

@echo off
set /a sum=0
for /r %%i in (*) do (
    set /a sum=sum+1
    echo %sum%
)
pause

那么你就会发现,你输出的结果会是清一色的0

这究竟是怎么回事?难道说是我代码敲错了?其实你没敲错,这个是批命令本来就是这样,我们的window把整个for循环其实看成了一个语句,既然是一个语句,那么语句内的变量自然就不会记录

同时如果你要是在这个for循环的外面再输出一次sum你就会发现他的值变成了正常的值

但是这给我们的编程带来了很多麻烦,我们要怎么解决呢?

使用setlocal enabledelayedexpansion

setlocal enabledelayedexpansion加在我们for循环的前面就可以解决
set local enbale delayed expansion 如果英语还过得去的朋友稍微记一下就能记得住


注意,在这个延时解释变量开启的时候,for循环内部的变量不再使用%sum%
而是使用!sum!的形式,如果依旧使用%sum%就会出现意料之外的错误

@echo off
set /a sum=0
setlocal enabledelayedexpansion
for /r %%i in (*) do (
    set /a sum=sum+1
    echo !sum!
)

pause

这个时候就可以看到我们的变量终于正常了!

posted @ 2022-03-17 19:19  271374667  阅读(404)  评论(0编辑  收藏  举报