我们知道,if语句在判断多个条件是否成立的时候,可以用 if 条件 if 条件……命令 的格式,但是,如果要用 if 条件 if 条件……(命令) else (命令) 的格式,你可能觉得没什么问题吧?
实际上,红色部分的语句是错误的,此时if语句执行情况如下:
1、如果if条件都成立,else之前的命令可以正确执行;
2、如果if中某些条件不成立:
a) 如果最后一个条件不成立,其他条件都成立,那么,else之后的命令能正确执行;
b) 如果最后一个条件成立,其他条件中有一个不成立,else之后的命令将不会执行。(本条有错误,请看6F和7F的分析)
[ Last edited by namejm on 2006-11-1 at 08:59 PM ]作者: NaturalJ0 时间: 2006-8-19 18:16 a) 如果最后一个条件不成立,其他条件都成立,那么,else之后的命令能正确执行;
b) 如果最后一个条件不成立,无论其他条件是否成立,else之后的命令将不会执行。
set /p syear=
set /p smouth=
set /p sday=
if %smouth%%sday% == 0301 (
set /a yyyy=syear%%4
if %yyyy% == 0 (
set lmouth=02 && set lday=29
) else (
set lmouth=02 && set lday=28
)
)
echo %lmouth% %lday%
分别测试20030301,20040301,
结果都是02 28
20040301的结果应该是02 29呀!!!
???
[ Last edited by xycoordinate on 2007-2-20 at 10:14 AM ]作者: weixieju 时间: 2007-3-1 11:07 只是说了IF语句的嵌套问题,只要学过C的朋友。不用就明白。作者: lp1129 时间: 2007-3-28 02:36 非顶不可作者: sadawn 时间: 2007-3-28 04:11 对于这个问题
我希望我们可以写出更可靠的代码`
比如这样
cd\
echo off
cls
echo 输入一个整数
set /p a=
if %a% gtr 90 echo ^>90&goto end
if %a% gtr 80 echo ^>80&goto end
if %a% gtr 70 echo ^>70&goto end
:end
pause
[ Last edited by sadawn on 2007-3-27 at 03:16 PM ]作者: huahua0919 时间: 2007-10-11 20:34 层层嵌套,层层括号!!作者: shrfish 时间: 2007-10-19 11:50 收益匪浅,3Q作者: zyz0304360 时间: 2008-3-10 23:42 学习了作者: nanhui112 时间: 2008-3-14 14:24 标题: 启用变量延迟
@echo off &setlocal enabledelayedexpansion
set /p syear=
set /p smouth=
set /p sday=
if "%smouth%%sday%"=="0301" (
set /a yyyy=syear%%4 if "!yyyy!"=="0" (
set lmouth=02 && set lday=29
) else (
set lmouth=02 && set lday=28
)
)
echo %lmouth% %lday%
pause
你的格式没问题,这里关系到bat的特殊性:
因为变量%yyyy%在同一if的括号语句里 所以要启用变量延迟,以捕捉动态变化,否则不能感知,会认为%yyyy%是空。看下面的例子,则可不用变量延迟扩展:
@echo off
set /p syear=
set /p smouth=
set /p sday=
if "%smouth%%sday%"=="0301" (
set /a yyyy=syear%%4 )
if "%yyyy%"=="0" (
set lmouth=02 && set lday=29
) else (
set lmouth=02 && set lday=28
)
echo %lmouth% %lday% &pause
---------我也是刚弄懂的^_^作者: lokeymei 时间: 2008-11-8 18:01 标题: 学习中………………