Board logo

标题: 请问在一个VBS脚本中是否可以运行两个或多个独立的循环 [打印本页]

作者: newxso    时间: 2008-11-9 20:39     标题: 请问在一个VBS脚本中是否可以运行两个或多个独立的循环

我想在一个VBS脚本中运行两个独立的循环,或者在一个VBS循环中嵌套另一个循环。此情形在BAT中用 for 就很容易实现,不知VBS能否实现,请高手指点。
作者: zqz0012005    时间: 2008-11-9 21:22

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
复制代码

作者: newxso    时间: 2008-11-10 07:45

是这样的,现在有两个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 编辑 ]
作者: zqz0012005    时间: 2008-11-10 09:39

其实你的意思就是满足两个条件之一就关机:超过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"
复制代码

作者: newxso    时间: 2008-11-10 13:25

用版主的方法解决了两个VBS合拼的问题,多谢指点。其实我的原意是,在执行延时前先启动另一个循环,再进入延时,而被启动的另一个循环与这时的延时互相独立地进行。我想这样需要启动两个进程,在一个脚本中可能不能实现。

[ 本帖最后由 newxso 于 2008-11-20 07:19 编辑 ]
作者: everest79    时间: 2008-11-21 17:21

vbs不支持多线程,你要实现这种功能,可能要找个第三方线程组件,可以在网上搜搜
作者: newxso    时间: 2008-11-25 19:38

关于在一个 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 编辑 ]




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