バッチファイルにはウェイトコマンドがありません。
なぜだ…?
ping localhost -n 3 > nul
とすると解決します。
数字の3のところに、待ちたい秒数+1 を入れてください。3を入れれば2秒待ちます。
Windows7なら
timeout 2
で良いです。これで2秒待つはずです。
自身の環境でのみ使用するバッチファイルなら後者で良さそうです。…と始めは思いました。
検証
内容があまりにも短すぎたので、本当に上記の記述で指定の秒数待てるのかを検証しました。
長く待つ場合は誤差を気にしないだろうと考えて、0、1、2、3、5、10秒待つ場合の検証です。
いきなり結論ですが、ping の方がより正確 です。
以下は待ちたい秒数に対して ping と timeout の結果が何秒になるかを表しています。
単位は秒で平均値±標準偏差で示します(n=5)。
待ちたい秒数 | ping の結果 | timeout の結果 |
---|---|---|
00秒 | 00.014±0.005 | 00.116±0.009 |
01秒 | 01.026±0.009 | 00.802±0.263 |
02秒 | 02.042±0.008 | 01.498±0.343 |
03秒 | 03.052±0.004 | 02.656±0.342 |
05秒 | 05.082±0.004 | 04.626±0.357 |
10秒 | 10.150±0.005 | 09.756±0.198 |
以下感想です(考察じゃありません)。
timeout はばらつきが大きいです。検証中にもすごく感じました。
実は検定もしたりしましたが、ぱっと見でも ping の方が優秀なのはなんとなくわかります。
ウェイトの長さにそれほど正確性はいらないかも知れませんが、ping なら昔のWindowsでも動くし、これからも ping を使うことにします。
念のため検証に使ったバッチを晒します。
結果を表計算ソフトに自力で(!)書き込んで計算させて、csvに保存してRで検定してました。こつこつと。その上での結論です。
たかがウェイトの検証に有意差とか無駄な時間を費やしたことにやってしまってから気付きましたが、無駄な時間も無駄じゃない(?)と前向きに考えておきます。
@echo off
rem 待ちたい秒数をSecondに指定
set Second=1
set /a SecondPing=Second+1
echo %TIME%(pingStart)
ping localhost -n %SecondPing% > nul
echo %TIME%(pingEnd)
echo %TIME%(timeoutStart)
timeout %Second%
echo %TIME%(timeoutEnd)
pause
ちなみに、ping と timeout の処理の順番のせいかと思って入れ替えたりもしましたが、まさかそんなことは無く結果はほぼ同じでした(無駄な時間でした)。