中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-16 02:08
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » if……else……语句中值得注意的一个问题 查看 11,608 回复 25
16 发表于 2007-02-16 23:38 ·  中国 浙江 台州 温岭市 电信
高级用户
★★
DOS学徒
积分 526
发帖 252
注册 2007-02-12 05:35
UID 79286
性别 男
状态 离线
有看了一篇呵呵
17 发表于 2007-02-17 00:27 ·  中国 安徽 马鞍山 电信
中级用户
★★
积分 493
发帖 228
注册 2007-02-16 00:38
UID 79596
性别 男
来自 安徽
状态 离线
学习!

我想计算前一天的日期
s:当前
l:前一天

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 ]
18 发表于 2007-03-01 11:07 ·  中国 广东 中山 电信
新手上路
积分 2
发帖 1
注册 2006-04-21 11:16
UID 54186
状态 离线
只是说了IF语句的嵌套问题,只要学过C的朋友。不用就明白。
19 发表于 2007-03-28 02:36 ·  IANA 局域网IP(Private-Use)
初级用户
★★
积分 186
发帖 92
注册 2007-03-27 08:20
UID 83047
性别 男
状态 离线
非顶不可
20 发表于 2007-03-28 04:11 ·  中国 湖南 长沙 电信
初级用户
积分 39
发帖 14
注册 2007-01-19 08:17
UID 77002
性别 男
状态 离线
对于这个问题
我希望我们可以写出更可靠的代码`
比如这样
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 ]
21 发表于 2007-10-11 20:34 ·  中国 江苏 苏州 移动
银牌会员
★★★
积分 1,608
发帖 780
注册 2007-10-07 10:19
UID 99089
性别 男
状态 离线
层层嵌套,层层括号!!
22 发表于 2007-10-19 11:50 ·  中国 浙江 杭州 电信
新手上路
积分 8
发帖 4
注册 2007-10-19 10:19
UID 100135
性别 男
状态 离线
收益匪浅,3Q
23 发表于 2008-03-10 23:42 ·  中国 山东 烟台 联通
中级用户
★★
积分 257
发帖 123
注册 2008-01-05 11:08
UID 107722
性别 男
来自 烟台
状态 离线
学习了
路 是自己选的
学习 是为了具备解决问题的能力
24 启用变量延迟 发表于 2008-03-14 14:24 ·  中国 广西 南宁 电信
初级用户
★★
积分 127
发帖 59
注册 2007-11-13 00:41
UID 102491
性别 女
状态 离线
@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
---------我也是刚弄懂的^_^
25 学习中……………… 发表于 2008-11-08 18:01 ·  中国 湖南 长沙 电信
新手上路
积分 18
发帖 17
注册 2008-11-07 22:13
UID 130325
性别 男
状态 离线
多谢指点
26 发表于 2009-02-02 12:13 ·  中国 江苏 无锡 电信
初级用户
★★
积分 137
发帖 85
注册 2007-11-26 21:05
UID 103862
性别 男
状态 离线
受益了
论坛跳转: