バッチファイルやPowerShellスクリプトで処理を一定時間待機させる方法

バッチファイルやPowerShellスクリプトで処理を一定時間待機させる方法

Windows環境でバッチファイルやPowerShellスクリプトを作成していると、処理を一時停止させたり、次の処理まで一定時間待機させたいときがあります。

Linux環境などでは「sleep」コマンドが有名ですが、Windows環境では、そのようなときに有用なコマンドとして「timeout」コマンドやPowerShellの「Start-Sleep」コマンドレットがあります。

そこでここでは、timeoutコマンドやPowerShellのStart-Sleepコマンドレットを使って、バッチファイルやPowerShellスクリプトで処理を一定時間待機させる方法を紹介します。

Memo

ちなみに、何かキー操作があるまで処理を一時停止させたいときは「pause」コマンドを利用します。

この記事は、以下の環境での動作結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

ソフトウェアバージョン
Windows 10 Pro 64bit21H2

timeoutコマンド

Windowsでは、Windows Vista/Windows Server 2003以降にtimeoutコマンドが標準搭載されており、引数として指定した秒数だけ待機してくれます。

たとえば、5秒待機させたいときは、次のように実行します。

C:\> timeout 5

なお、timeoutコマンドは、デフォルトでは待機中に何らかのキーを押すとそこで待機が終了してしまいますが、「/nobreak」オプションを付ければ、キー操作による中断を無効化できます。

C:\> timeout 5 /nobreak

また、timeoutコマンドは、デフォルトで1秒ごとにカウントダウンのメッセージが表示されますが、メッセージを表示させたくないときは、標準出力を「nul」デバイスへリダイレクトすることで、メッセージを非表示にできます。

バッチファイルやPowerShellスクリプトで処理を一定時間待機させる方法

C:\> timeout 5 /nobreak >nul

timeoutコマンドのヘルプは、次のとおりです。

バッチファイルやPowerShellスクリプトで処理を一定時間待機させる方法

PowerShellのStart-Sleepコマンドレット

PowerShellのStart-Sleepコマンドレットも、引数として指定した時間だけ待機してくれます。

たとえば、5秒待機させたいときは、次のように実行します。

PS C:\> Start-Sleep 5

また、待機する時間の単位はデフォルトは「秒」ですが「-m <ミリ秒>」と指定すれば、ミリ秒単位で待機時間を指定できます。

PS C:\> Start-Sleep -m 5000

Start-Sleepコマンドレットのヘルプは、次のとおりです。

バッチファイルやPowerShellスクリプトで処理を一定時間待機させる方法

あとがき

ちなみに、昔のバッチファイルなどでは、一定時間待機する代替的な方法として「ping localhost -n X >nul」コマンドで、X部分に待機する秒数を指定して待機させるケースもありました。