Stackoverflowの以下の記事がはてブで話題になっていたので取り上げる。
Windowsには*nixで言うところのsleepコマンドが存在せず、バッチ等で一定時間(例えば5秒だけ)ウェイトさせることができない。
このためにいくつかハックがある。
-
pingを利用する -
timeoutを利用する -
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年にもなって未だこんな話題が出てくる事態にはならなかっただろう。
