找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28450|回复: 10

[问题求助] [已解决]vbs如何1分钟后跳出循环

[复制链接]
发表于 2014-6-26 19:17:26 | 显示全部楼层 |阅读模式
本帖最后由 522235677 于 2014-6-27 18:06 编辑
  1. do
  2. ...........
  3. loop
复制代码
该代码会无限循环,怎样能在循环开始后1分钟跳出循环

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-6-26 19:32:11 | 显示全部楼层
一秒后退出 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)
复制代码
 楼主| 发表于 2014-6-26 19:39:37 | 显示全部楼层
回复 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
发表于 2014-6-26 20:04:35 | 显示全部楼层
回复 3# 522235677


    你都 wscript.quit 了,当然不循环了
 楼主| 发表于 2014-6-26 20:06:05 | 显示全部楼层
回复 4# CrLf


    不是的,我的这个还是一直在循环,If ret Then 都没有达成,所有还没quit
发表于 2014-6-26 21:43:29 | 显示全部楼层
回复 5# 522235677


    变量类型问题:
  1. CDbl(WScript.Arguments(1))
复制代码
一般会自动转换,不懂这里为什么不会,没研究
 楼主| 发表于 2014-6-26 22:04:58 | 显示全部楼层
回复 6# CrLf


    提示 变量使用了一个vbscript中不支持的automation 类型 CDbl
发表于 2014-6-26 22:40:56 | 显示全部楼层
回复 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类型转换

评分

参与人数 1技术 +1 收起 理由
522235677 + 1 1

查看全部评分

 楼主| 发表于 2014-6-27 18:06:13 | 显示全部楼层
回复 8# CrLf


    是我写错了……
发表于 2015-1-3 07:55:19 | 显示全部楼层
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()) & " 秒过去鸟。不要嫌代码长长长 ..."
复制代码
发表于 2015-1-8 20:03:38 | 显示全部楼层
加上sleep方法进行延迟,否则会进入死循环的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 14:48 , Processed in 0.022174 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表