|
qqfx
新手上路
积分 14
发帖 6
注册 2007-1-26
状态 离线
|
『楼 主』:
求个批处理,要求先检查系统时间(已解决)
求个批处理,要求先检查系统时间在8:00到18:00之间,然后运行下一步,否则跳出
[ Last edited by qqfx on 2007-1-26 at 10:47 AM ]
|
|
2007-1-26 22:31 |
|
|
不得不爱
超级版主
我爱DOS
积分 5310
发帖 2044
注册 2005-9-26 来自 四川南充
状态 离线
|
|
2007-1-26 22:46 |
|
|
SpikeKnox
初级用户
积分 116
发帖 28
注册 2007-1-3
状态 离线
|
『第
3 楼』:
这样能满足你的要求吗?
@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 ]
|
|
2007-1-26 22:57 |
|
|
qqfx
新手上路
积分 14
发帖 6
注册 2007-1-26
状态 离线
|
|
2007-1-26 23:11 |
|
|
qqfx
新手上路
积分 14
发帖 6
注册 2007-1-26
状态 离线
|
『第
5 楼』:
简单试运行了一下,没问题,
SpikeKnox的我能读懂
斑斑的电脑能读懂
|
|
2007-1-26 23:46 |
|
|
redtek
金牌会员
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
6 楼』:
解释 2 楼 不得不爱 版主代码:
Quote: | :: 『第 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 ]
此帖被 +4 点积分 点击查看详情 评分人:【 feiying001 】 | 分数: +1 | 时间:2007-2-15 10:43 | 评分人:【 htysm 】 | 分数: +1 | 时间:2007-2-16 04:02 | 评分人:【 Eblis 】 | 分数: +2 | 时间:2007-3-1 07:55 |
|
|
Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2007-1-27 01:06 |
|
|
qqfx
新手上路
积分 14
发帖 6
注册 2007-1-26
状态 离线
|
|
2007-1-27 02:55 |
|
|
htysm
高级用户
积分 866
发帖 415
注册 2005-12-4
状态 离线
|
|
2007-1-27 04:40 |
|
|
sweiwei
初级用户
积分 22
发帖 10
注册 2006-12-30
状态 离线
|
|
2007-1-29 10:29 |
|
|
anqing
高级用户
积分 859
发帖 413
注册 2006-8-14
状态 离线
|
|
2007-2-8 22:58 |
|
|
jianren256
新手上路
积分 14
发帖 7
注册 2007-2-13
状态 离线
|
|
2007-2-13 11:24 |
|
|
zh159
金牌会员
积分 3687
发帖 1467
注册 2005-8-8
状态 离线
|
『第
12 楼』:
Quote: | 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步
.......... |
|
改一下:
set /a a=%time:~0,2%%time:~3,2%
if %a% geq 800 if %a% leq 1800 (goto 下一步)
goto :eof
:下1步
.......... 这样可以很直观的设置时间范围
|
|
2007-2-13 14:26 |
|
|
qqfx
新手上路
积分 14
发帖 6
注册 2007-1-26
状态 离线
|
『第
13 楼』:
偶现在可以把这个放到启动里,开机后自动上ADSL,计划里在加个断开的,我是包时段的8:00~18:00
|
|
2007-2-14 22:36 |
|
|
blue812
初级用户
积分 57
发帖 29
注册 2006-9-27
状态 离线
|
『第
14 楼』:
非常感谢6楼的详细解释,又学到了一些.
|
|
2007-2-15 06:42 |
|
|
Eblis
中级用户
积分 251
发帖 108
注册 2007-1-7 来自 湖南==>广州
状态 离线
|
『第
15 楼』:
非常好````
|
DOS新人.多多指導 |
|
2007-3-1 07:56 |
|