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

请问在一个VBS脚本中是否可以运行两个或多个独立的循环

[复制链接]
发表于 2008-11-9 20:39:00 | 显示全部楼层 |阅读模式
我想在一个VBS脚本中运行两个独立的循环,或者在一个VBS循环中嵌套另一个循环。此情形在BAT中用 for 就很容易实现,不知VBS能否实现,请高手指点。
发表于 2008-11-9 21:22:06 | 显示全部楼层
1、什么叫独立的循环?非嵌套循环不都是独立的吗?

2、嵌套循环很容易啊
  1. for i=1 to 9
  2.     for j=1 to 9
  3.         if j <= i then str = str & i & "×" & j & "=" & i * j & vbTab
  4.     next
  5.     str=str & vbCrlf
  6. next
  7. WScript.Echo str
复制代码
 楼主| 发表于 2008-11-10 07:45:15 | 显示全部楼层
是这样的,现在有两个VBS1和VBS2,VBS1是循环检测即时钟点,VBS2是一个延时循环提示程序,如何把VBS1合拼到VBS2中呢?

VBS1:
  1. Set WshShell = CreateObject("Wscript.Shell")
  2. SleepTime = "23:00:00"
  3. While true
  4.    if DateDiff("s", Time, SleepTime) < 0 then
  5.      WshShell.Popup "睡眠时间已到,马上就会关机!    ", 20, "温馨提示", vbInformation
  6.      WshShell.run "shutdown -s -r -t 0"
  7.      Wscript.Quit
  8.    end if
  9.    WScript.Sleep(10000)
  10. wend
复制代码


VBS2:
  1. Set WshShell = CreateObject("Wscript.Shell")
  2. for i = 1 to 3
  3.      Wscript.Sleep 1000*60*60
  4.      WshShell.Popup "你已经使用电脑" &i& "个小时了,请注意休息!    ", 10, "温馨提示", vbInformation
  5. next
  6. Wscript.Sleep 1000*15
  7. WshShell.Popup "电脑的使用时间已到,马上就会关机!    ", 20, "温馨提示", vbInformation
  8. WshShell.run "shutdown -s -r -t 0"
复制代码

[ 本帖最后由 newxso 于 2008-11-10 09:03 编辑 ]
发表于 2008-11-10 09:39:04 | 显示全部楼层
其实你的意思就是满足两个条件之一就关机:超过23:00:00或者超过3个小时
  1. Set WshShell = CreateObject("Wscript.Shell")
  2. SleepTime = "23:00:00"
  3. for i = 1 to 3
  4.     counter = 0
  5.     While counter<60
  6.         if DateDiff("s", Time, SleepTime) < 0 then
  7.             WshShell.Popup "睡眠时间已到,马上就会关机!    ", 20, "温馨提示", vbInformation
  8.             WshShell.run "shutdown -s -r -t 0"
  9.             Wscript.Quit
  10.         end if
  11.         WScript.Sleep 1000*60
  12.         counter = counter + 1
  13.     wend
  14.     WshShell.Popup "你已经使用电脑" &i& "个小时了,请注意休息!    ", 10, "温馨提示", vbInformation
  15. next
  16. Wscript.Sleep 1000*15
  17. WshShell.Popup "电脑的使用时间已到,马上就会关机!    ", 20, "温馨提示", vbInformation
  18. WshShell.run "shutdown -s -r -t 0"
复制代码
 楼主| 发表于 2008-11-10 13:25:25 | 显示全部楼层
用版主的方法解决了两个VBS合拼的问题,多谢指点。其实我的原意是,在执行延时前先启动另一个循环,再进入延时,而被启动的另一个循环与这时的延时互相独立地进行。我想这样需要启动两个进程,在一个脚本中可能不能实现。

[ 本帖最后由 newxso 于 2008-11-20 07:19 编辑 ]
发表于 2008-11-21 17:21:38 | 显示全部楼层
vbs不支持多线程,你要实现这种功能,可能要找个第三方线程组件,可以在网上搜搜
 楼主| 发表于 2008-11-25 19:38:33 | 显示全部楼层
关于在一个 VBS 脚本中实现两个独立循环的问题,暂时用了以下方法:
  1. Set WshShell = CreateObject("Wscript.Shell")
  2. if WScript.Arguments.Count = 0 then
  3.    MyName = WScript.ScriptFullName
  4.    WshShell.run(chr(34) & MyName & chr(34) & " a"),0,false
  5.    One
  6. else
  7.    Two
  8. end if
  9. Wscript.Quit

  10. '循环1
  11. Sub One()
  12.     for i = 1 to 5
  13.         WshShell.popup "提示" & i & "次!", 2, "提示A"
  14.         Wscript.Sleep 1000
  15.     next
  16. End Sub

  17. '循环2
  18. Sub Two()
  19.     for j = 1 to 10
  20.         WshShell.popup "提示" & j & "次!", 2, "提示B"
  21.         Wscript.Sleep 1000
  22.     next
  23. End Sub
复制代码

利用以上方法,可以把在 3 楼提到的两个 VBS 合拼到一个 VBS 中。

[ 本帖最后由 newxso 于 2008-11-26 08:54 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 04:05 , Processed in 0.017988 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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