中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求一时段运行的指定程序的bat
作者:
标题: 求一时段运行的指定程序的bat 上一主题 | 下一主题
yhshiro
初级用户





积分 130
发帖 59
注册 2007-12-25
状态 离线
『楼 主』:  求一时段运行的指定程序的bat

看了1小时的IF命令还是看不懂。。。无奈。。。。请高手帮忙写一个

在指定的星期内的某个时段运行一个指定的程序!~
如:
我要在星期一到星期四的下午2点到5:00内运行这个bat则启动一个程序,如果在该时段或星期外则不做任何动作!~

2010-3-31 10:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  


@echo off&setlocal enabledelayedexpansion
set H=寒一二三四五六日夜孤星
for /f "tokens=1,2 delims=:" %%i in ("%time%") do for /l %%k in (1,1,7) do if "!H:~%%k,1!"=="%date:~13,1%" if %%k leq 4 if %%k geq 1 if %%i%%j leq 1700 if %%i%%j geq 1400 start %SystemRoot%\system32\mspaint.exe
日期%date%、时间%time%必须符合如下示例:
2010-03-31 星期三 9:05:07.11
2010-03-28 星期日 17:55:20.03
其中if %%k leq 4 if %%k geq 1 if %%i%%j leq 1700 if %%i%%j geq 1400中数字分别为星期四、星期一、下午5点(17点)整、下午两点(14点整)
该批处理在运行时自动检测当前时间是否符合时间段要求,符合则启动画图程序然后退出,否则直接退出。

如果要实现在某时间段内自动运行某程序,请直接使用系统的任务计划功能

[ Last edited by Hanyeguxing on 2010-3-31 at 11:43 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-3-31 11:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yhshiro
初级用户





积分 130
发帖 59
注册 2007-12-25
状态 离线
『第 3 楼』:  

老大!~看到你的网志了!~
那个 任务计划-schtasks
的厉害啊!~~
我去学学用那个搞定。。。
这个批处理太难看懂了!
谢谢!

2010-3-31 13:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zaixinxiangnian
初级用户





积分 151
发帖 106
注册 2009-10-9
来自 河南省
状态 离线
『第 4 楼』:  谢谢高手们

那些代码连在一起对于初级的不太容易看懂,Hanyeguxing 能不能分段写下,然后在做个解释

2010-3-31 17:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (657614933)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 5 楼』:  

1,因为时间格式为17:55:20.03或9:55:20.03,所以不能使用截取,那就要用for /f解析。
for /f "tokens=1,2 delims=:" %%i in ("%time%") do
解析%time%,并以:作分隔符。这样%time%将被分成3部分,依次是小时、分和秒。因为只要求精确到分,所以只取小时和分就可以,即tokens=1,2,变量为%%i、%%j。
2,%date%为日期,例如格式:2010-03-28 星期日或2010-03-31 星期三。这里我们只用到最后一个字符,为“日一二三四五六”中的某一个。但这些字符不能直接参与比较,需要转换。
for /l %%k in (1,1,7) do if "!H:~%%k,1!"=="%date:~13,1%" echo %%k
%%k从1到7进行for /l迭代,所以!H:~%%k,1!实际就是!H:~1,1!到!H:~7,1!,即截取变量H的第2到第8个字符。因为set H=寒一二三四五六日夜孤星,所以也就依次是“一二三四五六日”,这个字符与%date:~13,1%截取的星期字符比较,相同时,%%k就是星期的数字,即“1234567”中对应的某一个。
3,“与”比较:连续if比较,即满足各个if的所有条件后,才执行命令start %SystemRoot%\system32\mspaint.exe。
分开写就是:
@echo off&setlocal enabledelayedexpansion
set H=寒一二三四五六日夜孤星
for /f "tokens=1,2 delims=:" %%i in ("%time%") do (
        for /l %%k in (1,1,7) do (
                if "!H:~%%k,1!"=="%date:~13,1%" if %%k leq 4 if %%k geq 1 if %%i%%j leq 1700 if %%i%%j geq 1400 start %SystemRoot%\system32\mspaint.exe
)
)




批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-3-31 19:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: