目次
ここで作るカウントダウン機能
ここでは、コマンドプロンプト上で、以下のようなカウントダウン機能を作ります。
何かキーを押すと、カウントダウンが始まり、10から1まで1秒ずつ数字が減少していきます。注目したいのは、コマンドプロンプトへの表示が下に続くのではなく、一行目だけでカウントダウンが行われている点です。
「timeout」コマンドで次の処理を待つ
「timeout」は次の処理に移るのを一定時間待つコマンドです。例えば、以下は「for文」を使って1秒おきにメッセージを10回表示するバッチファイルプログラムです。
1 2 3 4 5 6 |
@echo off for /l %%a in (1,1,10) do ( echo 1秒毎に表示されます timeout /t 1 ) |
以下、実行結果です。「1秒毎に表示されます」というメッセージが1秒毎に表示されていきます。
「/t」オプションは待機時間を指定するためのもので、ここでは1秒を指定しています。これを使ってカウントダウン機能が作れそうです。
もう一度、出力画面に注目すると、「echo」コマンドで出力している以外に「0 秒待っています。続行するには何かキーを押してください …」というメッセージがありますが、これは「timeout」コマンドによって自動的に出力されるものです。この出力を消すために以下のように「> nul」を追記します。
1 2 3 4 5 6 |
@echo off for /l %%a in (1,1,10) do ( echo 1秒毎に表示されます timeout /t 1 > nul ) |
以下、実行結果です。
このように、「timeout」コマンドによって表示されるメッセージ「0 秒待っています。続行するには何かキーを押してください …」を別の場所に出力し、コマンドプロンプト上では見えなくしています。
「> nul」は「timeout」コマンドだけでなく別のコマンドに対しても、余計な表示をさせたくないときに使用できます(「コマンドプロンプトに出力・表示させない -やりたいこと検索-」を参照)。
次に、「echo」コマンドの出力を数字に置き換えます。このとき、表示される数字は10から1ずつ減らしていき1に達したら終了とします。なので、ここではfor文の「%%a」を利用するのがスマートなやり方だと思われます。
1 2 3 4 5 6 7 8 9 10 11 12 |
@echo off echo カウントダウン:開始 pause for /l %%a in (10,-1,1) do ( echo カウントダウン: %%a timeout /t 1 > NUL ) echo カウントダウン:終了 pause |
「for」コマンドについては、「for(繰り返し処理) -コマンド別解説-」をご覧下さい。
ついでに、カウントダウンの開始と終了の出力も書き加えました。これを実行すると以下のようになります。
「cls」コマンドで前の表示を消す
続いて、コマンドプロンプトの表示を下に続けるのではなく、その場所でカウントダウンするように編集します。これは、「cls」コマンドを使ってforループのたびに表示を削除することで実現できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@echo off echo カウントダウン:開始 pause cls for /l %%a in (10,-1,1) do ( echo カウントダウン: %%a timeout /t 1 > NUL cls ) echo カウントダウン:終了 pause |
二箇所に「cls」を追記し、表示をリセットしています。参考は「cls(画面の表示をクリアする) -コマンド別解説-」です。
これで目的のカウントダウン機能が完成しました。