在不使用WScript.sleep的情况下,执行VB脚本的批处理文件命令的时间

时间:2015-12-24 06:04:10

标签: batch-file vbscript automation

我有一个批处理文件启动telnet服务器并停止telnet服务器,其间有休眠时间。

脚本:

set OBJECT=WScript.CreateObject("WScript.Shell")
WScript.sleep 5000
OBJECT.SendKeys "net stop TlntSvr{ENTER}"
WScript.sleep 30000
OBJECT.SendKeys "net start TlntSvr{ENTER}"
WScript.sleep 30000
OBJECT.SendKeys "exit"

如您所见,上面的代码使用net stop TlntSvr停止 telnet服务,然后使用net start TlntSvr启动telnet服务,其休眠时间介于WScript.sleep 3000之间。

问题: 现在我需要在多台系统PC /笔记本电脑中运行此批处理文件,并且在每个执行情况下,启动/停止 telnet服务/ telnet服务安装的时间各不相同,因此当我在不同系统中运行脚本时,我不得不每次修改睡眠时间

问题: 有没有办法为下一次执行计时,只要第一次执行完成,它就会开始下一次执行?含义我不需要为每台笔记本电脑/ PCS配置休眠时间,下次执行只有在第一次执行完毕时才会根据每台PC自身的执行行为启动。

1 个答案:

答案 0 :(得分:0)

您所展示的不是 批处理文件命令 。如果您希望批处理执行此操作,则以下内容是等效的:

Net Stop TlnSvr
PING -n 31 127.0.0.1>nul
Net Start TlnSvr
PING -n 31 127.0.0.1>nul

但是,批处理命令是顺序的,如果您只需要在继续之前完成每个命令,那么您只需删除Ping延迟。

Net Stop TlnSvr
Net Start TlnSvr

我们仍然使用一些批处理文件,因为我们必须按顺序运行许多不同的命令,并确保在下一次启动之前完成一个。

如果我错过了这条船,请发表评论并进行编辑。

修改:在评论后跟进。

在VBscript中,您可以捕获第一个命令执行时的日期/时间,然后监视命令之间的日期/时间,以确保正确的时间。

Dim TimeDif:  TimeDif = 40 'seconds
Dim CmdTime:  CmdTime = now()
'... do your first command here...
do while datediff("S", CmdTime, now()) < TimeDif
    wscript.sleep(5000) '5 seconds
loop
'... do your second command here...

现在计时器正在考虑命令执行时间,而不仅仅是在命令之间休眠一段时间。

将TimeDif设置为命令开始到下一个命令开始差异,以秒为单位。

编辑:这个更优雅。没有循环。它计算时差并睡觉那段时间。

Dim TimeDif:  TimeDif = 30 'seconds
Dim CmdTime:  CmdTime = now()
Dim ToNext
'... do your first command here...
ToNext = (TimeDif * datediff("S", CmdTime, now())) * 1000
wscript.sleep(ToNext)
'... do your second command here...