如何在vbscript中设置延迟

如何在vbscript中设置延迟?

WScript.Sleep(100)不适用于Windows XP,Vista。

为此工作(XP)。

创build一个新文件,称之为test.vbs。 把它放在里面。

 WScript.Sleep 1000 MsgBox "TEST" 

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

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

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

下面的例子将延迟到从指令处理的那一刻起,直到10秒。

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

如果是VBScript,应该是

 WScript.Sleep 100 

如果是JavaScript

 WScript.Sleep(100); 

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

下面这行会让你的脚本睡5分钟。

 WScript.Sleep 5*60*1000 

请注意,传递给睡眠呼叫的值以毫秒为单位。

这里的很多答案都假设你正在Windows脚本宿主中运行你的VBScript(通常是wscript.exe或者cscript.exe )。 如果你得到像“ variables未定义:”WScript“的错误,那么你可能不是。

只有在Windows脚本宿主下运行WScript对象时,如果您正在另一个脚本宿主(如Internet Explorer)下运行(并且您可能没有意识到自己是否像HTA一样),那么它就是可用的不会自动提供。

微软的嗨,脚本专家! 博客有一篇文章进入这个主题如何在HTA中临时暂停脚本? 其中他们使用VBScript setTimeout来创build一个计时器来模拟一个睡眠,而不需要使用CPU Hogging循环等。

使用的代码是这样的:

 <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> 

查看链接的博客文章的完整解释,但本质上,当button被点击时,它创build一个计时器,从现在开始发射5,000毫秒,当它触发运行VBScript子例程称为“PausedSection”清除计时器,并运行任何你想要的代码。

这是另一种select:

 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 

睡眠时间函数以毫秒(ms)为单位

如果你想要3分钟,那就这样做:

 WScript.Sleep(1000 * 60 * 3) 

更好的使用定时器

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

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

注意:-n选项是重试次数,-w是ping的超时时间(以毫秒为单位)。 我select了127.255.255.254地址,因为它在回送范围内,ms窗口不响应。

我也怀疑这将提供毫秒的准确性,但在另一个笔记我试过它在一个应用程序使用MS脚本控制,而内置睡眠functionlocking接口此方法没有。

如果有人能够提供解释为什么这个方法没有locking接口,我们可以使这个答案更完整。 在用户线程中运行的两个睡眠函数。

 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 

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

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

更新
看起来像微软从win 8中删除了Sleep.exe,所以这不能在win 8中工作,除非你把%s文件夹中的Sleep.exe放在%path%中。