Board logo

标题: 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