如何在vbscript中设置延迟

时间:2009-11-13 12:57:20

标签: vbscript

如何在vbscript中设置延迟?

WScript.Sleep(100)无法在Windows XP,Vista上运行。

12 个答案:

答案 0 :(得分:49)

为此而努力(XP)。

创建一个新文件,将其命名为test.vbs。把它放进去吧。

WScript.Sleep 1000
MsgBox "TEST"

运行它,注意显示消息框之前的延迟。

注意,数字以毫秒为单位,因此1000为1秒。

答案 1 :(得分:30)

如果您正在尝试模拟VBScript中的睡眠延迟但WScript不可用(例如:您的脚本是从Microsoft的BGInfo工具调用的),请尝试以下方法。

以下示例将从处理指令的那一刻起延迟10秒:

Dim dteWait
dteWait = DateAdd("s", 10, Now())
Do Until (Now() > dteWait)
Loop

答案 2 :(得分:20)

如果是VBScript,则应该是

WScript.Sleep 100

如果是JavaScript

WScript.Sleep(100);

以毫秒为单位的时间。 WScript.Sleep 1000导致1秒睡眠。

答案 3 :(得分:10)

以下行将使您的脚本睡眠5分钟。

WScript.Sleep 5*60*1000

请注意,传递给sleep调用的值以毫秒为单位。

答案 4 :(得分:8)

这里的许多答案都假设您在Windows Scripting Host中运行VBScript(通常是wscript.execscript.exe)。如果您收到错误,例如'变量未定义:“WScript”'那么您可能不会。

只有当您在Windows Scripting Host下运行时,WScript对象才可用,如果您在另一个脚本主机(例如Internet Explorer)下运行(并且您可能没有意识到它,如果您在某个类似于HTA)它不会自动提供。

微软的嘿,脚本专家!博客有一篇专门讨论这个主题How Can I Temporarily Pause a Script in an HTA?的文章,其中他们使用VBScript setTimeout来创建一个模拟睡眠的计时器,而不需要使用CPU占用循环等。

使用的代码是:

<script language = "VBScript">

    Dim dtmStartTime

    Sub Test
        dtmStartTime = Now 
        idTimer = window.setTimeout("PausedSection", 5000, "VBScript")
    End Sub

    Sub PausedSection
        Msgbox dtmStartTime & vbCrLf & Now
        window.clearTimeout(idTimer)
    End Sub

</script>

<body>
    <input id=runbutton  type="button" value="Run Button" onClick="Test">
</body>

有关完整说明,请参阅linked blog post,但基本上当单击按钮时,它会创建一个从现在开始触发5,000毫秒的计时器,并在其触发时运行名为“PausedSection”的VBScript子例程,该子例程将清除计时器,并运行您想要的任何代码。

答案 5 :(得分:7)

这是另一种选择:

Sub subSleep(strSeconds) ' subSleep(2)
    Dim objShell
    Dim strCmd
    set objShell = CreateObject("wscript.Shell")
    'objShell.Run cmdline,1,False

    strCmd = "%COMSPEC% /c ping -n " & strSeconds & " 127.0.0.1>nul"     
    objShell.Run strCmd,0,1 
End Sub 

答案 6 :(得分:4)

睡眠时间功能以毫秒(ms)为单位

如果你想要3分钟,那就是这样做的方法:

WScript.Sleep(1000 * 60 * 3)

答案 7 :(得分:4)

更好地使用计时器:

Sub wait (sec)
    dim temp
    temp=timer
    do while timer-temp<sec
    loop
end Sub

答案 8 :(得分:3)

这是我的解决方案。使用脚本,该脚本由第三方程序运行,未声明WScript且不允许导入。

Function MySleep(milliseconds)
  set WScriptShell = CreateObject("WScript.Shell")
  WScriptShell.Run "Sleep -m " & milliseconds, 0, true
end Function

<强>更新
看起来微软从win 8中删除了Sleep.exe,所以除非你将Sleep.exe放在%path%中定义的文件夹中,否则这在win 8中不起作用。

答案 9 :(得分:3)

以下是@ user235218提供的解决方案的更新,允许您指定所需的毫秒数。

注意:-n选项是重试次数,-w是ping的超时时间(以毫秒为单位)。我选择了127.255.255.254地址,因为它处于环回范围内,并且ms窗口没有响应它。

我也怀疑这会提供毫秒精度,但另一方面我在使用ms脚本控件的应用程序中尝试了它,而内置睡眠功能锁定了界面,这种方法没有。

如果某人可以解释为什么这种方法没有锁定界面,我们可以使这个答案更加完整。两个睡眠函数都在用户线程中运行。

Const WshHide = 0
Const WAIT_ON_RETURN = True

Sub Sleep(ByVal ms)

   Dim shell 'As WScript.Shell

   If Not IsNumeric(ms) Then _
       Exit Sub

   Set shell = CreateObject("WScript.Shell")

   Call shell.Run("%COMSPEC% /c ping -n 1 -w " & ms & " 127.255.255.254 > nul", WshHide, WAIT_ON_RETURN)

End Sub

答案 10 :(得分:1)

如本answer所述:

Application.Wait (Now + TimeValue("0:00:01"))

将等待1秒

答案 11 :(得分:0)

WScript.Sleep 100

以下代码应该可以正常工作。