「カウントダウン後,定期的に動くタイマー」をBATだけで作る方法 (リアルタイムで残り秒数を表示し,処理を定期実行)
BATファイルで,「定期的に動くタイマー」を手軽に作る。
時間を置いた繰り返し処理を自動化できる。
タイマーでカウントダウン中の残り秒数も,リアルタイムに表示される。
例として,5分おきにWiFiに再接続してみよう。
下記のバッチファイルを「管理者権限で実行」すればよい。
@echo off rem カウントダウンして定期的にタイマー処理するバッチ rem 残り秒数をそのつど変化させて表示するために,変数の遅延展開が必要 setlocal enabledelayedexpansion rem 処理が終わったらここに戻ってくる :START rem 何秒間待機するか SET COUNTDOWN_MAX=300 rem 変数の遅延展開のために,事前に宣言だけしておく SET COUNT_NOKORI=0 rem カウントダウンする rem 指定回数だけ繰り返す for /L %%i in ( 0, 1, %COUNTDOWN_MAX% ) do ( rem 残り秒数を引き算で計算しなおす SET /a COUNT_NOKORI=%COUNTDOWN_MAX%-%%i rem 残り秒数を表示 ※遅延展開のために!で囲んでいる点に注意 cls echo 残り!COUNT_NOKORI!秒 rem 1秒スリープ(XP以下でも通用する,pingを使った方法) ping 127.0.0.1 -n 2 > nul ) rem 時間が来たら実行する処理 rem 無線LANをOFFにする(※バッチを管理者として実行すること) netsh int set int "ワイヤレス ネットワーク接続" disable rem 無線LANをONにする netsh int set int "ワイヤレス ネットワーク接続" enable rem バッチの最初に戻る goto START
すごく手軽に実現できるタイマーだ。
このバッチの実装上のテクニックとしては…
- 環境変数の算術演算 (SET /a でカウンタを引き算)
- 環境変数の遅延展開 (!〜〜!でカウンタ変数を変化させながらecho表示)
- Windowsのバージョンに関わりなくsleepできるように,pingを使用
- ネットワークアダプタの再起動に当たり,devcon.exeを使わなくてもデバイスのON/OFF切り替えができるように,netshコマンドを代わりに使用
- 残り秒数が変化してゆくように見せかけるために,clsで画面内用を毎回削除
といったところ。
なお,上記のタイマーの仕組みを,実用的に応用したのが下記のバッチ。
ネットワーク接続が切れたら,自動的に再接続してくれるバッチ (WiFiの電波が弱くても,自動で無線LANにつなぎなおす)
http://language-and-engineering.hatenablog.jp/entry/20140918/BATWifiNetworkCo...
構文の参考:
Windows のバッチファイルでループ回数をカウントアップする (遅延環境変数) : もやもやプログラミング
http://blog.livedoor.jp/moya_pro/arch...
- set local するときに enabledelayedexpansion と宣言し、カウントアップしたい変数を ! で囲みます。
遅延展開される CMD バッチスクリプトで ! を記述する方法 - is BUG Ready ?
http://d.hatena.ne.jp/ladybug/2009053...
- 遅延展開は、% のかわりに ! で囲まれた環境変数名を、実行単位で評価してくれる。
DOSバッチファイルでの計算方法
http://www.ylw.mmtr.or.jp/~jkondou/pr...
- /aのオプション指定をすれば、変数の計算ができる。
関連する記事:
BATのforループで,「0埋めされた数値」を連番で出力しよう (環境変数の遅延展開と,数値の大小比較判定の方法)
http://language-and-engineering.hatenablog.jp/entry/20131116/BATLoopNumberInc...
開発用のフォルダ構成を,自動的に生成してくれるバッチ (プロジェクト用のリポジトリ立ち上げに便利。ついでに,用が済んだら自動消滅!)
http://language-and-engineering.hatenablog.jp/entry/20120126/p1
繰り返し実行可能なコンパイルバッチ
http://language-and-engineering.hatenablog.jp/entry/20081208/1228708657
開発に役立つ,BATファイルの書き方・パターン集 (コマンドプロンプトの定石を体系的に学び,バッチ中級者になろう)
http://language-and-engineering.hatenablog.jp/entry/20130502/PatternsOfMSDOSo...