Board logo

标题: 100元有偿求个定时重复运行程序的批处理 [打印本页]

作者: hijackle    时间: 2016-3-9 17:45     标题: 100元有偿求个定时重复运行程序的批处理

配置.ini文件如下:
[配置]
//[]里为时间段,=后分别为该时间段需执行程序次数区间。
[00-01] = 7-10
[01-02] = 5-10   
[02-03] = 5-10
[03-04] = 5-9
[04-05] = 5-9
[05-06] = 4-8
[06-07] = 4-8
[07-08] = 6-10
[08-09] = 6-10
[09-10] = 8-12
[10-11] = 8-12
[11-12] = 8-12
[12-13] = 8-12
[13-14] = 8-13
[14-15] = 8-13
[15-16] = 8-14
[16-17] = 8-14
[17-18] = 9-14
[18-19] = 10-15
[19-20] = 12-15
[20-21] = 13-16
[21-22] = 13-16
[22-23] = 12-15
[23-24] = 10-15

需要重复的运行程序test.exe
举例如下:
比如在时间段20点到21之间要从配置文件里面随机获取13-16之间的某个数值,比如获取到的数值为14,那个test.exe在这个时间段就需要运行14次。
程序test.exe执行自身到程序运行完毕大概需要1分半到2分半左右自动结束,该时间不是固定的。
test.exe需用start /wait test.exe执行。但是程序test.exe执行的时候偶尔会卡住,所以在start /wait之前必须进行倒计时,倒计时150秒,如果程序进程还在则需用taskkill强制结束该进程。
另外程序需要在这个时间段大致均匀的的执行,也就是比如这次的一个小时本次执行该程序14次,那么大概首次程序开始执行的时间到下次程序开始执行的时间大概为3600/14=257,这个只是大致时间间隔,不需要非常精确,但是不能够执行该程序14次,你半个小时就执行完毕了,下个半个小时啥事都不做了。
也就是在获得该时间段需要执行多少次之后,test.exe运行到程序本身运行结束(或者是被taskkill结束的)必须等待多少秒之后才开始下次执行test.exe
这个等待多少秒大致是要根据该时段需要运行多少次决定的,同上比如该时间段需执行14次,程序本身执行大概1分半-2分半左右也就是90-150秒之间,两次程序执行的时间间隔为257秒,那个这个随机等到的时间就应该是(257-90)-(257-150)也就是107-167秒之间。

比如现在时间为下午15-16之间,批处理要求回显如下:

今天是 2016-03-09
[00-01]共执行程序8次。
[01-02]共执行程序9次。
[02-03]共执行程序7次。
[03-04]共执行程序5次。
[04-05]共执行程序6次。
[05-06]共执行程序8次。
[06-07]共执行程序7次。
[07-08]共执行程序8次。
[08-09]共执行程序9次。
[09-10]共执行程序10次。
[10-11]共执行程序8次。
[11-12]共执行程序9次。
[12-13]共执行程序10次。
[13-14]共执行程序10次。
[14-15]共执行程序9次。
[15-16]共需执行程序10次。程序正在执行,已经执行3次,剩余7次。

每天0点需要把上面的每个时间段共执行多少次的内容写入到test.log文件里,方便查看。


可能写的不是详细,如果有疑问,请跟帖,请高手帮帮忙,谢了。

补充下,程序执行环境为:WinXP 32Bit 和Win7 64Bit
作者: 522235677    时间: 2016-3-9 17:59

报名,今晚写
作者: hijackle    时间: 2016-3-9 18:05

报名,今晚写
522235677 发表于 2016-3-9 17:59



    谢了
作者: ivor    时间: 2016-3-9 21:14

回复 1# hijackle


    你这个test.exe每次的运行时间能不能固定死
作者: 522235677    时间: 2016-3-9 21:50

本帖最后由 522235677 于 2016-3-9 21:51 编辑
  1. l
复制代码

作者: hijackle    时间: 2016-3-9 22:28

回复  hijackle


    你这个test.exe每次的运行时间能不能固定死
ivor 发表于 2016-3-9 21:14



    不能固定死,上下浮动10-30秒没有关系,但是不能死
作者: wskwfkbdn    时间: 2016-3-10 07:08

以上说test.exe可能会卡死,start /wait运行的这种情况批处理根本不能继续执行,只螚手动结束,你认为有什么好办法解决吗?除非你写程序支持线程操作,否则有点难办的
作者: happy886rr    时间: 2016-3-10 08:10

本帖最后由 happy886rr 于 2016-3-10 08:36 编辑
  1. start cmd  /k 2.cmd
  2. ping -n 5 127.1
  3. taskkill /f /im cmd.exe /fi "windowtitle eq 管理员:  2"
  4. taskkill /f /im test.exe
  5. pause
  6. ---------------------------
  7. 2.cmd内容
  8. title 2
  9. start /wait test.exe
复制代码
回复 7# wskwfkbdn
作者: wskwfkbdn    时间: 2016-3-10 08:56

回复 8# happy886rr


    这是是经典用法
作者: hijackle    时间: 2016-3-10 10:32

以上说test.exe可能会卡死,start /wait运行的这种情况批处理根本不能继续执行,只螚手动结束,你认为有什么 ...
wskwfkbdn 发表于 2016-3-10 07:08



    思路问题,我有个思路不知道可行不?
1.根据时间段获取到需要随机运行程序的次数,比如前面说的14次,那么如果平均运行14次,则每次程序运行时间间隔为257秒。
2.设置一个-30到30之间的随机数的函数random,把程序每次运行时间间隔257秒改成257+random,假如当次获取的随机数为-20,那么当次运行的时间间隔即为237秒
3.那么在运行start /wait test.exe之前,先调用另外一个函数就是倒计时前面获取的237秒之后检测test.exe进程是否存在,存在则结束test.exe

不知这个思路有没有问题
作者: wskwfkbdn    时间: 2016-3-10 13:15

回复 10# hijackle


    其实我觉得写程序来的方便,程序上面新建几个任务,到时间就执行任务。
作者: codegay    时间: 2016-3-11 00:23

用python写可以吧?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2