━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ いざというときに役立つMS−DOS 執筆:速星 千里 第39号(2004.01.17) バッチプログラミング(4) 5821部配信 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <目次> ■ はじめに ● メルマガHPリニューアルのお知らせ ■ バッチファイルの起動オプション ■ 別のバッチファイルを呼び出す ● CALLコマンド **[PR]************************************************************* ■■■■■■■■■■ [ AQ'z Mail Service ] ■■■■■■■■■■ 複数のメールマガジンに広告を載せませんか? 発行部数×0.5円で、お好みの発行部数分だけ、御予算に応じてメールマガ ジンに広告を掲載いたします。読者層の指定ができますよ! お問い合わせは tetrahedrane@yahoo.co.jp まで http://www.aqz.nu/ ******************************************************************* ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ はじめに ------------------------------------------------------------------------ 皆さん、こんにちは。速星です。 今回は、「バッチプログラミング」の最終回です。バッチファイルを通常のコマ ンドと同じように利用する方法について説明します。 ------------------------------------------------------------------------ ● メルマガHPリニューアルのお知らせ 発行を重ねるにつれてバックナンバーの数が増え、メルマガHPが見にくくなっ てきましたので、先日、HPをリニューアルしました。 http://www.geocities.co.jp/Bookend-Hemingway/4963/column/dos/ バックナンバーを別のページに分けて、トップページを見やすくしました。 また、新たにリンク集を設けました。DOSの学習やパソコンのトラブル解決な どにご利用下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ バッチファイルの起動オプション ------------------------------------------------------------------------ 多くのコマンドは、起動時にオプションを指定することで、そのコマンドの動作 条件を変更することができます。 例えばDIRコマンドの場合、オプション「/P」を指定すると、ファイル一覧の表 示を1画面ずつにすることができます。 では、バッチファイルでも通常のコマンドと同じように、起動オプションによっ て動作を変更することはできないでしょうか。 それを可能にするのが、「%1」「%2」といった特殊な変数です。 バッチファイルの起動時に指定したオプションは、自動的に、前から順に「%1」 「%2」などという特殊な変数に保存されるのです。 具体例を挙げてみましょう。 -----(ECHO_OPT.BATここから)----- ECHO 「%1」 ECHO 「%2」 ECHO 「%3」 -----(ECHO_OPT.BATここまで)----- 上のような内容のバッチファイルをつくり、「ECHO_OPT.BAT」というファイル名 で保存します。 これをオプション付きで実行すると、以下のようになります。 > C:\>ECHO_OPT ABC XYZ > > C:\>ECHO 「ABC」 > 「ABC」 > > C:\>ECHO 「XYZ」 > 「XYZ」 > > C:\>ECHO 「」 > 「」 1番目のオプション「ABC」と変数「%1」、2番目のオプション「XYZ」と「%2」 が対応している様子が分かります。また、3番目のオプションを指定せずに起動 したため、「%3」の部分は空の文字列となっています。 このようにして、バッチファイルでも、「%1」から「%9」まで、最大9つのオプ ションを利用することができます。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 別のバッチファイルを呼び出す ------------------------------------------------------------------------ バッチファイル中に記述できるのは、コマンドだけではありません。バッチファイ ルから別のバッチファイルを呼び出すこともできます。 実験してみましょう。 -----(MAIN.BATここから)----- @ECHO OFF ECHO MAINからSUBを呼び出します. SUB ECHO MAIN実行終了. -----(MAIN.BATここまで)----- -----(SUB.BATここから)----- @ECHO OFF ECHO SUBが呼び出されました. -----(SUB.BATここまで)----- 上の2つのバッチファイルをつくり、MAIN.BATを実行すると以下のようになりま す。 > C:\>MAIN > > MAINからSUBを呼び出します. > SUBが呼び出されました. MAIN.BAT中の「SUB」の記述によってSUB.BATが呼び出されている様子が分かりま す。しかし、MAIN.BATの最後の1行「ECHO MAIN実行終了.」が実行されていませ ん。これは一体どういうことでしょうか。 この現象は、DOSがバッチファイルを実行する仕組みに関係しています。 DOSは、実行中のバッチファイルのファイル名と行番号を記憶するようになっ ています。「〜というバッチファイルの〜行目」というようにして、ファイルの 最初の行から1行ずつ、実行していきます。そして、最後の行の実行が終わった ら、バッチファイル全体の実行が完了したとみなしています。 ところが、DOSはファイル名と行番号を1組しか記憶しません。 そのため、上の例では次のようになります。 (MAIN.BAT実行開始) MAIN.BATの1行目: @ECHO OFF MAIN BATの2行目: ECHO MAINからSUBを呼び出します. MAIN.BATの3行目: SUB (SUB.BAT実行開始) SUB.BATの1行目 : @ECHO OFF SUB.BATの2行目 : ECHO SUBが呼び出されました. (SUB.BATの最後の行の実行が終了) (SUB.BAT実行終了) SUB.BATの実行を開始した時点で、DOSが記憶している実行中バッチファイル 名が「MAIN.BAT」から「SUB.BAT」にすり替わってしまっています。 このとき、MAIN.BATを途中まで実行していたことはどこにも記憶されません。 従って、SUB.BATの実行終了後も、MAIN.BATの続きを実行することはありません。 ------------------------------------------------------------------------ ● CALLコマンド 前節でバッチファイルの入れ子状の呼び出しがうまくいかなかったのは、実行中 のバッチファイルのファイル名と行番号が1組しか記憶されていないからでした。 ということは、2組目のファイル名と行番号を記憶する仕組みを作れば、意図通 りの動作をさせることができるということです。 その仕組みを提供するのが、CALLコマンドです。 CALLコマンドの書式は簡単です。 CALL バッチファイル名 [オプション[ ...]] 「CALL」に続けて、バッチファイル名、そして必要ならばバッチファイルのオプ ションを指定します。 要するに、普通にバッチファイルを呼び出すときに入力する文字列の頭に「CALL」 を付け加えるだけです。 では、MAIN.BAT中の「SUB」を「CALL SUB」に書き換えてみましょう。 -----(MAIN.BAT改訂版ここから)----- @ECHO OFF ECHO MAINからSUBを呼び出します. CALL SUB ECHO MAIN実行終了. -----(MAIN.BAT改訂版ここまで)----- これを実行すると下のようになります。 > C:\>MAIN > > MAINからSUBを呼び出します. > SUBが呼び出されました. > MAIN実行終了. ちゃんと、SUB.BATの終了後にMAIN.BATの続きが実行されています。 複雑な作業をするためのバッチファイルをいきなり作るのは難しいでしょう。 しかし大抵の場合、複雑な作業は、単純な作業の組み合わせに分解することがで きます。そして、個々の単純な作業を行うバッチファイルなら、なんとか作れる はずです。 単純な作業を行うバッチファイルをCALLコマンドで組み合わせていくことで、目 的のバッチファイルを、比較的楽に作ることができるようになるのです。 ------------------------------------------------------------------------ 今回はここまでです。 お疲れ様でした! 次号の予定は、「FATファイルシステム(2)」です。 第38号の続きで、ディレクトリの実体について説明します。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ コメントをお待ちしています ------------------------------------------------------------------------ 皆さんからの感想・質問・要望をお待ちしています。 「こんなテーマを扱ってほしい」 「こんなことはできるの?」 「このへんが分かりにくかった」 「1回の分量を増やしてほしい/減らしてほしい」 など、掲示板(下記URL)まで気軽にお願いします。 http://bbs9.otd.co.jp/dos/bbs_thread (スレッド表示) http://bbs9.otd.co.jp/dos/bbs_tree (ツリー表示) メールでもコメントを受け付けておりますので、そちらもご利用下さい。 tetrahedrane@yahoo.co.jp なお、いただいたコメントは、本マガジン上で引用する場合があります。 (メールアドレスやお名前は一切公開いたしません) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ● 感想・質問宛先 http://bbs9.otd.co.jp/dos/bbs_tree tetrahedrane@yahoo.co.jp ● 広告募集 当メルマガへの広告掲載をご希望の方は、下記アドレスまでお願いします。 tetrahedrane@yahoo.co.jp ● メルマガ交換広告募集 当メルマガとのメルマガ交換広告をご希望の方は、下記アドレスまでどうぞ。 tetrahedrane@yahoo.co.jp ● 登録・解除・バックナンバー http://www.geocities.co.jp/Bookend-Hemingway/4963/column/dos/ このメールマガジンは、『まぐまぐ』を利用して発行しています。 http://www.mag2.com/m/0000106066.htm (c) 2003 Chisato Hayahoshi