Windowsのコマンドプロンプトでsleepする3つの方法
タグ: windows / 初版公開: 2013-11-19

Stackoverflowの以下の記事がはてブで話題になっていたので取り上げる。

Windowsには*nixで言うところのsleepコマンドが存在せず、バッチ等で一定時間(例えば5秒だけ)ウェイトさせることができない。

このためにいくつかハックがある。

  1. pingを利用する
  2. timeoutを利用する
  3. choiceを利用する

pingを利用する

pingはパケットを送信する試行回数やタイムアウト時間を調整できる。これを利用して無意味なpingをsleep代わりに利用するハックである。

タイムアウトで停止時間を制御する場合は、以下のように無効なIPアドレスにpingすれば良い。-nで試行回数1回として、-Wで5000ミリのタイムアウトが発生するように期待する。

ping 1.1.1.1 -n 1 -W 5000 > nul

逆に、ローカルホストにpingして試行回数により停止時間を制御する方法もある。これは127.0.0.1が必ず応答し、かつpingの送信間隔が1秒であることを応用したものだ。

ping 127.0.0.1 -n 5 > nul

個人的には後者の方がシンプルで好きである。

timeoutを利用する

これは非常にシンプルだ。Windows7であればtimeoutコマンドが利用できる。Windowsが新しいならぜひ利用したい。

timeout 5

choiceを利用する

choiceはユーザに選択をさせるコマンドである。このコマンドはユーザに選択肢を提示し、一定時間入力がなければ、デフォルトが選択されたものとみなす。

choice/Tスイッチでタイムアウトを設定できるため、これをsleep代わりに利用しようというものだ。5秒のウェイトであれば以下のとおり。

choice /C YN /D Y /t 5

しかしなぜマイクロソフトはsleepをDOSに組み込んでおかなかったのか、理解に苦しむ。せめてもう少し気が利いていれば、2013年にもなって未だこんな話題が出てくる事態にはならなかっただろう。