68
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

バッチファイルでwaitを入れる

Last updated at Posted at 2017-11-30

コメントで指摘いただいた方法がベストだと思うのでコレを推奨。

10秒Waitを入れる
timeout /t 10 > nul

ただし、プロンプト上でキー入力があると待ちがキャンセルされます。

普通に実行するとこうなる
C:\>timeout /t 10
 10 秒待っています。続行するには何かキーを押してください ...

キー入力待ちでキャンセルされたくない場合は/nobreakオプションを指定します。

キャンセルされない
timeout /t 10 /nobreak >nul

別の方法

最初に記載していた方法。
コメントで教えてもらった上記の方法で事足りると思うので、こんな方法もありますという程度です…。

10秒Waitを入れる
waitfor dummy /t 10>nul 2>&1 & verify>nul
  • waitforは指定した名前のシグナル(例ではdummy)が送られるまで/tに続いて指定された数値の秒数だけ待つ。1
  • シグナルが送られない場合、エラーとして終了する。
  • waitforコマンドのエラー終了時にはエラー: 'dummy' 待ちがタイムアウトしました。とメッセージが標準エラー出力に送信される。バッチで利用する場合はエラー出力を抑制したいので、>nul 2>&1にリダイレクト
  • また、エラーの副作用でerrorlevel1になるため、バッチ内で他の処理へ影響を与えないように& verify>nulverifyコマンドの実行を連結して、errorlevel0で上書きする。(古典的なやり方かも)

さらに他の方法

pingを使う方法が紹介されている場合もある。

pingを利用する方法
ping -n 11 localhost>nul

ただ、この方法はerrorlevel1になるような副作用はないものの、pingの送信間隔が必ずしも1秒ではない(実際にはもっと短い)ことと、実際に待ちたい間隔+1を指定する必要がある2ため、長い時間を指定するほど誤差が生まれやすい。

  1. シグナルを送る場合、/siオプションを使ってwaitfor /si dummyのように指定する。(別のコマンドプロンプトを開いて実行)

  2. ping -n 1 localhostで試せばわかるが、1回目の送信が即時終了するため。

68
71
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
68
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?