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
vBScriptの場合は、
WScript.Sleep 100
JavaScriptの場合
WScript.Sleep(100);
ミリ秒単位の時間。 WScript.Sleep 1000は1秒のスリープをもたらします。
次の行は、スクリプトを5分間スリープ状態にします。
WScript.Sleep 5*60*1000
Sleep呼び出しに渡される値はミリ秒単位であることに注意してください。
ここでの多くの答えは、VBScriptをWindows Scripting Host(通常はwscript.exe
またはcscript.exe
)で実行していることを前提としています。 'Variable is undefined: "WScript"'のようなエラーが発生する場合は、おそらくそうではありません。
WScriptオブジェクトは、Windows Scripting Hostで実行している場合、Internet Explorerなどの別のスクリプトホストで実行している場合にのみ使用できます(HTAのような場合は気付かないかもしれません)自動的には利用できません。
MicrosoftのHey、Scripting Guy!ブログには、このトピックだけの記事があります 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>
詳細な説明については リンクされたブログ投稿 を参照してください。ただし、基本的にボタンをクリックすると、今から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)
以下に、@ 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
これが私の解決策です。 WScriptが宣言されておらずインポートが許可されていないサードパーティのプログラムによって実行されたスクリプトを使用しました。
Function MySleep(milliseconds)
set WScriptShell = CreateObject("WScript.Shell")
WScriptShell.Run "Sleep -m " & milliseconds, 0, true
end Function
更新
Microsoftがwin 8からSleep.exeを削除したように見えるため、%path%で定義されたフォルダーにSleep.exeを配置しない限り、これはwin 8で機能しません。