timeout - 待機
バッチファイルで、他のプログラミング言語のsleepやwaitのように、一定時間待機したい場面があります。
例えば、startコマンドでアプリケーションを起動した後、準備が整うまで数秒待ってから次の処理に進みたい場合などです。
コマンドプロンプト・バッチファイルで一定時間待機するには、timeoutコマンドを使用します。ここでは、基本的な使い方からオプションの設定方法まで、サンプルコードとともに説明します。
timeoutコマンドの基本的な使い方
timeoutコマンドの使い方は以下の通りです。
timeout /t <待機する秒数> [/nobreak]
/tオプションは必須です。指定せずに実行すると、以下のようにエラーとなります。
/tオプションには、待機する秒数を-1から99999の範囲で指定します。
例として、10 秒間待機する場合は以下のようになります。

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超 入門

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門
timeoutコマンドは、必ずしも指定した時間を待機するわけではありません。
「ユーザーが何も操作しなければ、指定した時間だけ待機する」というのが正しい動作で、timeout /t 10と指定していても、ユーザーが何かキーを押すと待機が終了し、次の処理に進みます。
この動作を無効にするには、/nobreakオプションを指定します。
/nobreakを指定すると、Ctrl + C 以外のキー入力では待機を中断できなくなります。
なお、Ctrl + C を押した場合は、バッチファイル自体の実行が中断されます(「バッチ ジョブを終了しますか (Y/N)?」と確認されます)。
timeoutコマンドの具体例
ユーザーが操作するまで無期限に待機する
/tオプションに-1を指定すると、ユーザーが何かキーを押すまで無期限に待機します。
メッセージを確認してもらいたいときなど、バッチファイルの最後で画面を閉じずに待機させる用途にも使えます。
バッチファイルで、処理と処理の間に待機時間を設ける
処理と処理の間に待機時間を設ける場合は、以下のように記述します。
@echo off
setlocal
echo 処理1
timeout /t 10
echo 処理2
endlocal
/nobreakオプションを指定していないため、ユーザーがキーを押すと待機が終了し、処理2に進みます。
バッチファイルで、処理と処理の間に必ず待機時間を設ける
キー入力で待機を中断させず、必ず指定した時間を待機させるには、/nobreakオプションを指定します。
@echo off
setlocal
echo 処理1
timeout /t 10 /nobreak
echo 処理2
endlocal
timeoutコマンドが使えないとき
timeoutコマンドは、入力リダイレクト(timeout /t 10 < input.txtなど)を使用している場合や、標準入力が使えない環境(タスクスケジューラ経由の実行など)では、以下のエラーとなることがあります。
このような場合は、存在しないアドレス127.0.0.1へのpingの応答待ちを利用して待機する方法があります。-nには待機したい秒数に 1 を足した回数を指定します。
ping 127.0.0.1 -n 11 > nul
上記は約 10 秒間待機します。