Board logo

标题: [问题求助] [已解决]vbs如何1分钟后跳出循环 [打印本页]

作者: 522235677    时间: 2014-6-26 19:17     标题: [已解决]vbs如何1分钟后跳出循环

本帖最后由 522235677 于 2014-6-27 18:06 编辑
  1. do
  2. ...........
  3. loop
复制代码
该代码会无限循环,怎样能在循环开始后1分钟跳出循环
作者: CrLf    时间: 2014-6-26 19:32

一秒后退出 vbs
  1. WScript.exe /T:1 test.vbs
复制代码
超过一秒结束循环
  1. t=timer
  2. do while timer-t<1
  3. ...........
  4. loop
复制代码
网页的话,可以这样
  1. id=setTimeOut("loopSub()",0)
  2. setInterval("clearTimeOut(id)",1000)
复制代码

作者: 522235677    时间: 2014-6-26 19:39

回复 2# CrLf
  1. Dim objShell,ret,wshshell
  2. set wshshell=createobject("wscript.shell")
  3. Set objShell = CreateObject("WSCript.Shell")
  4. t=timer
  5. do while timer-t<WScript.Arguments(1)
  6.   ret = objShell.Appactivate(WScript.Arguments(0))
  7.     If ret Then
  8.     wshshell.sendkeys "{tab}"
  9.     wscript.quit (10)
  10. end if
  11. loop
复制代码
我这样为什么没有效果,我第二个参数是10
作者: CrLf    时间: 2014-6-26 20:04

回复 3# 522235677


    你都 wscript.quit 了,当然不循环了
作者: 522235677    时间: 2014-6-26 20:06

回复 4# CrLf


    不是的,我的这个还是一直在循环,If ret Then 都没有达成,所有还没quit
作者: CrLf    时间: 2014-6-26 21:43

回复 5# 522235677


    变量类型问题:
  1. CDbl(WScript.Arguments(1))
复制代码
一般会自动转换,不懂这里为什么不会,没研究
作者: 522235677    时间: 2014-6-26 22:04

回复 6# CrLf


    提示 变量使用了一个vbscript中不支持的automation 类型 CDbl
作者: CrLf    时间: 2014-6-26 22:40

回复 7# 522235677


我这是正常的:
测试用 cscript test.vbs "任意一个不存在的标题" 5  引用内容为如下代码的 vbs
  1. Dim objShell,ret,wshshell
  2. set wshshell=createobject("wscript.shell")
  3. Set objShell = CreateObject("WSCript.Shell")
  4. t=timer
  5. do while timer-t<CDbl(WScript.Arguments(1))
  6.   ret = objShell.Appactivate(WScript.Arguments(0))
  7.     If ret Then
  8.     wshshell.sendkeys "{tab}"
  9.     wscript.quit (10)
  10. end If
  11. Loop
复制代码
那要不分别试试其他的办法,比如 CInt(WScript.Arguments(1)) 强制int类型转换和 WScript.Arguments(1)/1 自动double类型转换
作者: 522235677    时间: 2014-6-27 18:06

回复 8# CrLf


    是我写错了……
作者: yu2n    时间: 2015-1-3 07:55

Timer() 不会在零点抽风?让我们严谨点:  XD
  1. Const nTimeOut = +5  ' 超时时间(秒)
  2. Dim dtStart, dtEnd
  3. dtStart = Now()
  4. dtEnd = DateAdd("s", nTimeOut, Now())
  5. Do While DateDiff("s", Now(), dtEnd) > 0
  6. WScript.Sleep 200
  7. ' Do Something ..
  8. Loop
  9. ' Do Something ..
  10. Msgbox DateDiff("s", dtStart, Now()) & " 秒过去鸟。不要嫌代码长长长 ..."
复制代码

作者: shelluserwlb    时间: 2015-1-8 20:03

加上sleep方法进行延迟,否则会进入死循环的。




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