【问题标题】:How to pause a vbscript execution?如何暂停 vbscript 执行?
【发布时间】:2014-06-05 08:06:21
【问题描述】:

如何从内部暂停脚本的执行?像 Sleep WinAPI 函数之类的东西?

【问题讨论】:

标签: vbscript


【解决方案1】:

您可以使用WScript 对象并在其上调用Sleep 方法:

Set WScript = CreateObject("WScript.Shell")
WScript.Sleep 2000 'Sleeps for 2 seconds

另一种选择是导入和使用 WinAPI 函数 directly(仅适用于 VBA,感谢 @Helen):

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sleep 2000

【讨论】:

  • 注意:您不能从 VBScript 运行 WinAPI 函数。您的第二个示例仅适用于 VB/VBA。
  • @Helen - 感谢您提供的信息。不知道这个限制。答案已更新。
  • 我刚试过这个,似乎Set WScript = ... 语句是无关的。只有一行WScript.Sleep 2000 为我工作(就像WScript.Echo 一直如此)。
  • @GordThompson - 这取决于您所在的脚本上下文。
  • 对我来说,它可以在没有 Set WScript = CreateObject("WScript.Shell") 行的情况下工作,但如果我包含该行,则会出现错误。
【解决方案2】:

下面的脚本片段创建了一个暂停子,它在字符串中显示暂停文本并等待 Enter 键。 z 可以是任何东西。如果需要多个用户干预需要暂停,那就太好了。我只是将它保存在我的标准脚本模板中。

Pause("Press Enter to continue")

Sub Pause(strPause)
     WScript.Echo (strPause)
     z = WScript.StdIn.Read(1)
End Sub

【讨论】:

    【解决方案3】:

    使用“Enter”最好使用 ReadLine() 或 Read(2),因为“Enter”键会生成 2 个符号。如果用户输入任何文本,即使使用 Read(2),也将跳过 Pause()。所以 ReadLine() 更好:

    Sub Pause()
        WScript.Echo ("Press Enter to continue")
        z = WScript.StdIn.ReadLine()
    End Sub
    

    更多例子请看http://technet.microsoft.com/en-us/library/ee156589.aspx

    【讨论】:

    • 我知道。但接受的答案有我指出的问题。我想为接受的答案添加评论,但我没有足够的声誉。所以我发布另一个答案
    • @PlasmaPower 该网站旨在为同一个问题找到多个答案。当这个问题被问到时,显然并不是每个可能的程序员都有所有可能的解决方案。谢尔盖很高兴添加了另一个答案。谢尔盖这是一个很好且可以接受的答案,而不是评论。 +1