如何在vbscript中设置延迟?
WScript.Sleep(100)
在Windows XP,Vista上无效。
做这个(XP)。
创建一个新文件,将其命名为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
WScript
shell对象以执行objShell.Sleep()
或WScript.Sleep()
。所以我使用了Paulie的方法。但有一个注意点:在Chrome中,如果你设置超过1秒的等待时间,它会弹出一个窗口询问是否要等待脚本响应。你可以选择“是”,然后它就能正常工作,但这可能会让很多非技术人员感到惊慌。 - vapcguy如果是VBScript,应该是这样的:
WScript.Sleep 100
如果它是JavaScript
WScript.Sleep(100);
以毫秒为单位的时间。WScript.Sleep 1000 会导致程序休眠1秒钟。
以下代码将使您的脚本休眠5分钟。
WScript.Sleep 5*60*1000
请注意,传递给sleep调用的值是以毫秒为单位的。
这里很多答案都假设您的VBScript在Windows脚本宿主中运行(通常是wscript.exe
或cscript.exe
),如果您遇到类似“变量未定义:"WScript"”的错误,那么您可能没有在使用。
只有在Windows脚本宿主下才能使用WScript对象,如果您在另一个脚本宿主下运行,比如Internet Explorer的脚本宿主(如果您正在使用HTA之类的东西并且没有意识到它),WScript不会自动可用。
Microsoft的Hey, Scripting Guy!博客有一篇文章涉及了这个话题《如何暂停HTA中的脚本》。在其中,他们使用VBScript的setTimeout
创建一个计时器来模拟Sleep,而无需使用占用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>
请查看链接的博客文章获取完整的解释,但基本上当按钮被点击时,它会创建一个定时器,该定时器将从现在起延迟5,000毫秒后触发,并且当它触发时运行名为“PausedSection”的VBScript子例程,该子例程清除定时器并运行您想要执行的任何代码。
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
Sub wait (sec)
dim temp
temp=timer
do while timer-temp<sec
loop
end Sub
“睡眠函数”的时间单位是毫秒(ms)。
如果你想要3分钟,可以这样做:
WScript.Sleep(1000 * 60 * 3)
这是我的解决方案。通过脚本工作,该脚本由第三方程序运行,没有声明WScript且不允许导入。
Function MySleep(milliseconds)
set WScriptShell = CreateObject("WScript.Shell")
WScriptShell.Run "Sleep -m " & milliseconds, 0, true
end Function
更新
看起来微软已经从win 8中删除了Sleep.exe,所以这在win 8上无法工作,除非您将Sleep.exe放在%path%定义的文件夹中。
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
WScript.Sleep(100)
在Windows XP和Vista上无法工作。”实际上它可以(在XP上进行了测试)。这条命令会等待100毫秒(即1/10秒)。如果您想要等待100秒,请使用100 * 1000,因为时间单位是毫秒。由于这是VBScript,所以您不需要使用括号。尽管使用括号不会出错,但也不是正确的写法。 - T.J. CrowderWSH.Sleep 1000
- user9556248