Windowsのバッチファイルで「〇秒休止(sleep)」するには?【 2020年最新版 】

Windows

LinuxなどUnix系OSなら、シェルスクリプト内で「sleep 秒数」を実行すれば、指定した秒数だけ進行を止めることができます。
スクリプトの進行を止めることで、たとえばループ処理で負荷がかかりすぎることを防いだり、任意の時刻まで待機させたりといったことが可能です。

しかしWindowsのコマンドプロンプトでは、標準で「sleep」コマンドが使えません。そのため、バッチファイルの進行を休止させるためには、別の手段が必要となります。

そこで、このページではWindowsのバッチファイルで「sleep」を実現する方法をまとめて紹介します。

「timeout」コマンドを使う

Windows Vista以降のWindowsでは「timeout.exe」というコマンドが使えます。ただし、デフォルトではユーザーがキー入力を行うと、すぐに終了してしまいます。キー入力を無視する場合は、「/nobreak」というオプションを指定して実行します。以下は3秒休止する場合の例です。

timeout /nobreak 3

timeoutコマンドはLinuxなどのsleepコマンドと異なり、以下のようにメッセージを出力します。

Linuxのsleepコマンドのように何も出力されないほうが良い場合は、以下のように「> nul」にリダイレクトしましょう。

PowerShellの「sleep」を使う

Windows 7以降に搭載されている「PowerShell」では「sleep 秒数」コマンドが使えます。そこで、バッチファイルで以下のように記述すれば、Unix系OSと同じようにスリープさせることが可能です。ただし、PowerShellをロードすることから、上述のtimeoutコマンドより余分な時間(ほとんどの環境で1秒未満)がかかります。以下は3秒休止する場合の例です。

powershell sleep 3

「-m」オプションを使って「ミリ秒」を指定することもできます。ただし、たとえば「-m 10」のようにごく短い時間を指定しても、前述の通りPowerShellのロードに時間がかかるので、正確に休止させることはできません。

なお「sleep」は、「Start-Sleep」というコマンドレットを短縮した別名(エイリアス)です。なので、「powershell Start-Sleep 秒数」と実行することもできます。

「ping」コマンドを使う

timeout.exeもPowershellも提供されていなかった頃のWindowsでは、「ping」コマンドを使って休止させる方法がよく使われていました。以下は「5秒休止」する場合の例です。

ping 127.0.0.1 -n 5 > nul

この例では、ローカルホスト(127.0.0.1)に5回pingを打っています。pingを打つ間隔は1秒なので、約5秒後にコマンドが終了して次の処理に進む、というわけです。

まとめ

Windows XP以前は「ping」を使った方法が定番でしたが、2020年現在、バッチファイルでスリープするなら「timeout」コマンドを使うのが最も良い方法でしょう。

履歴

2020-02-22 Windows 10 Pro バージョン 1909 ビルド 18363.657 で内容が正しいことを確認
2020-02-22 Windows 10 Home バージョン 1909 ビルド 18363.657 で内容が正しいことを確認

Windows
\シェアお願いします/
LFI

コメント

タイトルとURLをコピーしました