バッチファイルにウェイトを入れる

バッチファイルにはウェイトコマンドがありません。

なぜだ…?

そこで

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.00500.116±0.009
01秒01.026±0.00900.802±0.263
02秒02.042±0.00801.498±0.343
03秒03.052±0.00402.656±0.342
05秒05.082±0.00404.626±0.357
10秒10.150±0.00509.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 の処理の順番のせいかと思って入れ替えたりもしましたが、まさかそんなことは無く結果はほぼ同じでした(無駄な時間でした)。

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

two × 3 =