
CODE: [Copy to clipboard]运行后我们会发现,echo 得到的结果是1,而不是我们想像中的2,这时候我们可以直接输入set回车,就可以看到a的值是2,但为什么显示出来的是1而不是2呢?这就是因为在准备执行上面第二句set /a a+=1 > nul & echo %a%的时候,命令解释器先将a的值读取出来了,这时还没有执行set /a a+=1,所以a的值是1,然后将1给了set,同时也给了echo,所以,虽然计算后,a=2,但显示出来的还是a=1。这时,如果我们想得到我们想要的结果,那么就要开启延迟环境变量了。set a=1
set /a a+=1 > nul & echo %a%
CODE: [Copy to clipboard]在第一句开启延迟环境变量后,运行第三句的时候就不是先将a的值读出来,而是在使用到的时候再读:运行到set /a的时候读出a=1,执行后a=2,在执行echo 的时候再去读取a的值a=2,所以最后的结果就是我们想要的2了。cmd /v:on
set a=1
set /a a+=1 > nul & echo !a!
CODE: [Copy to clipboard]上面的代码是输出1-10中能被2整除的数(在批处理中取余运算符要用%%代替命令提示符下的%),虽然if是单独的一行,没有和set在一行,由于有“()”括起来,他只是for语句中的一部分。@echo off & setlocal EnableDelayedExpansion
set a=0
for /l %%i in (1,1,10) do (
set /a a=%%i%%2
if !a!==0 echo 1-10的偶数有:%%i)
pause
| 欢迎光临 中国DOS联盟论坛 (http://cndos.fam.cx/forum/) | Powered by Discuz! 2.5 |