Windows環境でバッチファイルやPowerShellスクリプトを作成していると、処理を一時停止させたり、次の処理まで一定時間待機させたいときがあります。
Linux環境などでは「sleep」コマンドが有名ですが、Windows環境では、そのようなときに有用なコマンドとして「timeout」コマンドやPowerShellの「Start-Sleep」コマンドレットがあります。
そこでここでは、timeoutコマンドやPowerShellのStart-Sleepコマンドレットを使って、バッチファイルやPowerShellスクリプトで処理を一定時間待機させる方法を紹介します。
ちなみに、何かキー操作があるまで処理を一時停止させたいときは「pause」コマンドを利用します。
目次
timeoutコマンド
Windowsでは、Windows Vista/Windows Server 2003以降にtimeoutコマンドが標準搭載されており、引数として指定した秒数だけ待機してくれます。
たとえば、5秒待機させたいときは、次のように実行します。
C:\> timeout 5
なお、timeoutコマンドは、デフォルトでは待機中に何らかのキーを押すとそこで待機が終了してしまいますが、「/nobreak」オプションを付ければ、キー操作による中断を無効化できます。
C:\> timeout 5 /nobreak
また、timeoutコマンドは、デフォルトで1秒ごとにカウントダウンのメッセージが表示されますが、メッセージを表示させたくないときは、標準出力を「nul」デバイスへリダイレクトすることで、メッセージを非表示にできます。
C:\> timeout 5 /nobreak >nul
timeoutコマンドのヘルプは、次のとおりです。
PowerShellのStart-Sleepコマンドレット
PowerShellのStart-Sleepコマンドレットも、引数として指定した時間だけ待機してくれます。
たとえば、5秒待機させたいときは、次のように実行します。
PS C:\> Start-Sleep 5
また、待機する時間の単位はデフォルトは「秒」ですが「-m <ミリ秒>」と指定すれば、ミリ秒単位で待機時間を指定できます。
PS C:\> Start-Sleep -m 5000
Start-Sleepコマンドレットのヘルプは、次のとおりです。
あとがき
ちなみに、昔のバッチファイルなどでは、一定時間待機する代替的な方法として「ping localhost -n X >nul」コマンドで、X部分に待機する秒数を指定して待機させるケースもありました。