如何在vbscript中设置延迟

Mar*_*ark 49 vbscript

如何设置vbscript的延迟?

WScript.Sleep(100) 在Windows XP,Vista上不起作用.

bad*_*d99 52

为此而努力(XP).

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

WScript.Sleep 1000
MsgBox "TEST"
Run Code Online (Sandbox Code Playgroud)

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

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

  • 删除)并替换(用空格使代码有效VBScript. (4认同)

小智 30

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

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

Dim dteWait
dteWait = DateAdd("s", 10, Now())
Do Until (Now() > dteWait)
Loop
Run Code Online (Sandbox Code Playgroud)

  • 它可以工作......但我担心该解决方案的CPU使用率(这是一个很长的循环).也许在没有WScript的脚本中,您可以使用CreateObject调用它,如下面的答案所示:http://stackoverflow.com/a/4037208/460362 (9认同)
  • 这也适用于经典asp中的vbscript. (2认同)
  • 可怕的解决方案。但是,如果某事是愚蠢的,但它有效……这并不愚蠢。 (2认同)

Jee*_*raj 20

如果它是VBScript,它应该是

WScript.Sleep 100
Run Code Online (Sandbox Code Playgroud)

如果是JavaScript

WScript.Sleep(100);
Run Code Online (Sandbox Code Playgroud)

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


Raj*_*gan 10

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

WScript.Sleep 5*60*1000
Run Code Online (Sandbox Code Playgroud)

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


小智 9

这里有很多答案假设您在Windows Scripting Host中运行VBScript(通常wscript.exe或者cscript.exe).如果您收到的错误如" 变量未定义:"WScript"那么您可能不是.

WScript对象仅在您在Windows Scripting Host下运行时才可用,如果您在另一个脚本主机(例如Internet Explorer)下运行(如果您使用的是HTA,则可能没有意识到)它是不会自动提供.

微软的嘿,脚本专家!博客有一篇文章只涉及这个主题我如何暂时暂停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>
Run Code Online (Sandbox Code Playgroud)

有关完整说明,请参阅链接的博客文章,但基本上当单击按钮时,它会创建一个从现在开始触发5,000毫秒的计时器,并且当它触发时运行名为"PausedSection"的VBScript子例程,它清除计时器,并运行任何你想要的代码.


Mar*_*kin 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 
Run Code Online (Sandbox Code Playgroud)


Nad*_*LEM 5

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

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

WScript.Sleep(1000 * 60 * 3)
Run Code Online (Sandbox Code Playgroud)

  • 另一个违反规则的做法是:调用 Sub 时使用 No()。 (3认同)
  • @Ekkehard.Horner 但是,它 _is_ 有效的 VBScript。它显式地传递值`ByVal`。我永远不会使用这样的括号;我会写`Call WScript.Sleep(...)`。 (3认同)