标题: IF 和 SET 命令的疑惑,还请前辈指教。
[打印本页]
作者: lzbow
时间: 2010-12-31 14:27
标题: IF 和 SET 命令的疑惑,还请前辈指教。
第一个:得出的结果 %a%依然是1,为什么不是2呢?
@echo off
set a=1
set /p p= y/n:
if "%p%" == "y" (
set /a a+=1
echo %a%
pause
)
exit
第二个:得出的结果%a%是2。
@echo off
set a=1
set /p p= y/n:
if "%p%" == "y" (
set /a a+=1
)
echo %a%
pause
exit
第三个:得出的结果也是2。
@echo off
set a=1
set /p p= y/n:
set /a a+=1
call :m
pause
)
:m
echo %a%
虽然可以不用if直接算出,但是有时需要到这样。
我非常的疑惑,经过思考,实验,我是这样解释:
if ()括号以外的是一级命令,括号里的命令属于二级命令,当执行二级命令时是从一级命令里取的参数,而二级命令是不能从二级取得参数。这样也就能说明
第一个和第二个里的echo %a% 的不同。
第三个的echo %a% 依然是属于if ()括号外的一级命令,通过CALL调用,只是改变执行的顺序。
不知道我这样的想法是否正确,还请各位前辈指教。
晚辈感谢不尽。
作者: liion631818
时间: 2010-12-31 16:29
个人感觉是if语句延迟扩展导致的
你启动延迟扩展:
@echo off
setlocal EnableDelayedExpansion
set a=1
set /p p= y/n:
if "%p%" == "y" (
set /a a+=1
echo !a!
)
pause
这时候会打印2了
作者: a130569
时间: 2011-1-2 15:08
学习了
作者: Hanyeguxing
时间: 2011-1-2 15:35
楼主看看这个
http://bbs.bathome.net/viewthrea ... 1%BF%2B%D1%D3%B3%D9