中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-04 02:24
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 求个批处理,要求先检查系统时间(已解决)
可打印版本  2,818 / 19
第1楼 qqfx 发表于 2007-01-26 22:31
新手上路 发帖 6 积分 14
求个批处理,要求先检查系统时间(已解决)
求个批处理,要求先检查系统时间在8:00到18:00之间,然后运行下一步,否则跳出

[ Last edited by qqfx on 2007-1-26 at 10:47 AM ]
第2楼 不得不爱 发表于 2007-01-26 22:46
超级版主 发帖 2,044 积分 5,310 来自 四川南充
SET /a a=%time:~0,2%*60+%time:~3,2%
if %a% geq 480 if %a% leq 1080 (goto 下一步)
GOTO :EOF
:下1步
..........
第3楼 SpikeKnox 发表于 2007-01-26 22:57
初级用户 发帖 28 积分 116
这样能满足你的要求吗?
@Echo OFF
Set /a thisTime=%Time:~0,2%
If %thisTime% LSS 8 Goto :End
If %thisTime% GTR 17 Goto :End

Echo Time is between 8:00-17:59
:: Run some code ...
Goto :EOF

:End
Echo Time is LSS then 8:00 or GTR then 17:59

[ Last edited by SpikeKnox on 2007-1-26 at 09:59 AM ]
第4楼 qqfx 发表于 2007-01-26 23:11
新手上路 发帖 6 积分 14
先晕一下
第5楼 qqfx 发表于 2007-01-26 23:46
新手上路 发帖 6 积分 14
简单试运行了一下,没问题,
SpikeKnox的我能读懂
斑斑的电脑能读懂
第6楼 redtek 发表于 2007-01-27 01:06
金牌会员 发帖 1,147 积分 2,902
解释 2 楼 不得不爱 版主代码:




:: 『第 2 楼』: 不得不爱 版主代码:


SET /a a=%time:~0,2%*60+%time:~3,2%
if %a% geq 480 if %a% leq 1080 (goto 下一步)
GOTO :EOF
:下1步
..........





上面代码(红色标示)是取 %time% 环境变量中的小时(采用截取字符串的方法取得的)

假如: %time% 所示时间为:11:15:33.01 (即:11点15分),则 %time:~0,2% 就是取 %time% 变量中从偏移量0开始处取两个字符。取到的就是小时



%time:~0,2%*60,把取到的小时再乘以60(分钟),因为一小时是60分钟,所以通过字符串截取功能取到的小时数要换算成总的分钟数,所以要再乘以60。因为将小时换算成分钟是为了方便比对某个时间的范围。



+%time:~3,2%,当取到小时并且让小时乘以60而换算成分钟还不行,因为还要得到 %time% 变量中的分钟数,所以 %time:~3,2% (假如%time%时间为: 11:15:33.01)那么就是从偏移量3开始(偏移量从0开始计算)取两个字符,这两个字符就是上面(蓝色标示)“15”。
因为小时数已换算成分钟了,再加上%time%里的分钟数,这样求出的当前时间的总分钟数才更准确。


换算得到总的分钟数就可以更方便简单的使用 IF 来计算(并且还可以进行加减计算等特殊时间或是以这种原理的对日期的范围操作……)。





leq 1080 (上面代码绿色标示),这里的 LEQ 是小于或等于的含义,它的帮助信息使用 IF /? 命令可以看到:

     EQU - 等于
     NEQ - 不等于
     LSS - 小于
     LEQ - 小于或等于
     GTR - 大于
     GEQ - 大于或等于

上面代码含义是指:小于或等于 1080 分钟(18点:就是从0点到晚上6点共有18个小时*每小时60分钟,就是1080分钟)

然后以分钟做为对比的基础单位:

IF  当前时间大于或等于480分钟(即480/60=8小时,就是上午8点) 并且  当前时间小于或等于1080分钟(1080/60=18小时,就是晚18点),只要时间的范围在这之间,这就是楼主要求的:当前时间如果在早8点——晚18点之间,就执行某个命令……




(截取字符串知识点: SET /? 的帮助信息中有)
(%time%的知识点: SET /? 的帮助信息的最后面有关于可以“调用”的动态环境变量)
(判断大小与判断的知识点: IF /? 的帮助信息中)
(Goto的知识点:   GOTO /? 的帮助信息中)




对于日期也可以使用类似的全转成数值的方法来判定某个文件的时间属性:属于在某个日期到某个日期的范围之内等特殊应用。

 

[ Last edited by redtek on 2007-1-26 at 12:10 PM ]
第7楼 qqfx 发表于 2007-01-27 02:55
新手上路 发帖 6 积分 14
收藏!!!
第8楼 htysm 发表于 2007-01-27 04:40
高级用户 发帖 415 积分 866
解释的很牛。
第9楼 sweiwei 发表于 2007-01-29 10:29
初级用户 发帖 10 积分 22
收藏!!!
第10楼 anqing 发表于 2007-02-08 22:58
高级用户 发帖 413 积分 859
解释的详细透了
第11楼 jianren256 发表于 2007-02-13 11:24
新手上路 发帖 7 积分 14
太牛了
第12楼 zh159 发表于 2007-02-13 14:26
金牌会员 发帖 1,467 积分 3,687
Originally posted by 不得不爱 at 2007-1-26 09:46:
SET /a a=%time:~0,2%*60+%time:~3,2%
if %a% geq 480 if %a% leq 1080 (goto 下一步)
GOTO :EOF
:下1步
..........

改一下:

这样可以很直观的设置时间范围
第13楼 qqfx 发表于 2007-02-14 22:36
新手上路 发帖 6 积分 14
偶现在可以把这个放到启动里,开机后自动上ADSL,计划里在加个断开的,我是包时段的8:00~18:00
第14楼 blue812 发表于 2007-02-15 06:42
初级用户 发帖 29 积分 57
非常感谢6楼的详细解释,又学到了一些.
第15楼 Eblis 发表于 2007-03-01 07:56
中级用户 发帖 108 积分 251 来自 湖南==>广州
非常好````
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023