中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 16:15
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何判断处于哪个时间段? 查看 1,910 回复 23
16 发表于 2008-05-13 17:58 ·  中国 广东 广州 番禺区 电信
初级用户
★★
积分 156
发帖 73
注册 2008-05-09 10:40
18年会员
UID 118210
性别 男
状态 离线
其实我最终的目的是要判断当前时间是学校上课的第几节课,在前辈的指导下我完成了代码,希望各位前辈看看还可不可以优化。
-----------------------------------------
set wt=不在时间段内
set t1=%time:~0,5%
if "%t1%" geq " 7:30" (
set wt=早读
)
if "%t1%" geq " 8:25" (
set wt=第一节
)
if "%t1%" geq " 9:15" (
set wt=第二节
)
if "%t1%" geq "10:05" (
set wt=第三节
)
if "%t1%" geq "10:55" (
set wt=第四节
)
if "%t1%" geq "13:30" (
set wt=午读
)
if "%t1%" geq "14:25" (
set wt=第五节
)
if "%t1%" geq "15:20" (
set wt=第六节
)
if "%t1%" geq "16:00" (
set wt=第七节
)
if "%t1%" geq "16:55" (
set wt=放学后
)
echo %wt%
--------------------------------------
谢谢大家。
为自己是中国人而倍感骄傲
17 发表于 2008-05-13 17:58 ·  中国 上海 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
另,实际上不带引号的话,空格就给忽略掉了,长度都不同了,还怎么比
18 发表于 2008-05-13 18:05 ·  中国 上海 电信
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
re: pykacha
你那段代码,如果都是这样单命令的话,括号可以去掉全部放单行里
另,比较的数据建议不要用带冒号的格式,既然用到了中转变量,那么可以这样:

::截取出时和分连到一起
set time1=%time:~0,2%%time:~3,2%
::去除时间最前面可能存在的那个空格
set time1=%time1: =%

::下面再开始比较吧,全部直接用数字,如845,910,1000等
19 发表于 2008-05-13 18:07 ·  中国 北京 朝阳区 联通
银牌会员
★★★
积分 1,287
发帖 634
注册 2007-05-02 15:06
19年会员
UID 87277
性别 男
来自 cmd.exe
状态 离线
时*分然后/一个数.
::EXP(只是一种方法)
上课时间假设8:00,在是9:00,一节课40分钟
然后/40+1,得2.说明是第二节.
这样可以很据结果来分析.不过第四节以后的检查就要加修正值了

而且不是特别准就是了

[ Last edited by knoppix7 on 2008-5-13 at 06:09 PM ]
20 发表于 2008-05-13 18:36 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
我说你们向复杂了还不信,只是有点疏忽,没带双引号。。。

Colstr函数在函数库里有,我就不写了:
@echo off
set "time= 9:05:45.99"
echo 假设当前时间为%time%
set/p=若在内显示<nul
call colstr a 0 "早" 0 1 0
set/p= 若大于9:10显示<nul
call colstr d 0 "迟" 0 1 1
echo ---------------------------------------

if "%time%" geq " 8:45" if "%time%" lss " 9:10" call colstr a 0 "早" 0 1 1
if "%time%" geq " 9:10" call colstr d 0 "迟" 0 1 1
pause


[ Last edited by plp626 on 2008-5-13 at 08:54 PM ]
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
21 发表于 2008-05-13 18:51 ·  中国 上海 鹏博士宽带
中级用户
★★
积分 484
发帖 250
注册 2007-06-05 23:33
19年会员
UID 90372
性别 男
状态 离线
呵呵,这样带上引号倒是靠谱了,想来1也应该比空格大。(还没试过这样比啊)
22 发表于 2008-05-13 19:31 ·  中国 广东 广州 番禺区 电信
初级用户
★★
积分 156
发帖 73
注册 2008-05-09 10:40
18年会员
UID 118210
性别 男
状态 离线
pooronce在18楼的提议很好,这样在编写代码时设置每节课时间时输入起来方便了不少,以后修改也方便.
19楼前辈的意见可以有助于我改进上午的时间判断,下午因为受眼保健操影响,就没什么规律了.

多谢了
为自己是中国人而倍感骄傲
23 16楼 发表于 2008-05-13 19:39 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
尽量使用if...else...来代替if...
24 可以用for来精简下: 发表于 2008-05-14 00:11 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线

@echo off&setlocal enabledelayedexpansion
set "times=早读 第一节 第二节 第三节 第四节 午读 第五节 第六节 第七节 放学后"
set "hm=7:30 8:25 9:15 10:05 10:55 13:30 14:25 15:20 16:00 16:55"
set t=%time:~,2%%time:~3,2%
for %%i in (%hm%) do (
set /a n+=1&set a=%%i&set a=!a:^:=!
if %t% lss 730 (
goto end
) else (
if %t% equ !a! (
goto echo
) else (
if %t% lss !a! set /a n-=1&goto echo
)

)
)
:end
echo 不在时间段内
pause>nul&goto :eof
:echo
for /f "tokens=%n% delims= " %%i in ("%times%") do echo %%i
pause>nul


[ Last edited by zw19750516 on 2008-5-14 at 01:18 AM ]
批处理之家新域名:www.bathome.net
论坛跳转: