━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ いざというときに役立つMS−DOS 執筆:速星 千里 第34号(2003.11.29) バッチプログラミング(2) 5843部配信 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <目次> ■ はじめに ■ アルゴリズムとは ● 表記方法 ● 制御構造 ■ 順次構造 ■ 選択構造 ● 単一選択 ● 多岐選択 ■ 反復構造 ● 前判定型 ● 後判定型 ● 両者の違い ─ PR ──────────────────────────────── ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ■1 来店不要でお申込みから最短20分でおなたの口座にお振込みいたします。 ■2 最高500万円迄当日振込OK!担保・保証人は不要。会社や家族にも内緒。 ■3 何と6ヶ月間お利息が無料。パート・アルバイトの方もご利用できます。 ■フレンドリーキャシング【ハートプラン】 http://www.810com.com/lll/pc/ ─ PR ──────────────────────────────── ─ PR ──────────────────────────────── ★ラブチャンネル★ http://love-ch.jp/?link=1142 恋って好きになったほうが・・・負け(T_T) 出会いがあって好きになって別れがあって恋をして(^o^; また出会いがあって好きになって別れがあって恋をして(>_<) ─ PR ──────────────────────────────── ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ はじめに ------------------------------------------------------------------------ 皆さん、こんにちは。速星です。 今号では、アルゴリズムについて説明します。 アルゴリズムは、バッチファイルをはじめとするプログラムの設計に不可欠な知 識です。ただパソコンを使うだけの人にはあまり縁がないかもしれませんが、プ ログラミングに挑戦してみようと思っている人は、一通り、身につけておいて下 さい。 なお、今号は以下のWebページを参考に執筆しました。 メルマガでは図を使った説明ができませんので、アルゴリズムそのものについて の詳しい内容は、Webページを読んだ方がいいかもしれません。 「アルゴリズム入門」 http://www5c.biglobe.ne.jp/~ecb/algorithm/algorithm00.html ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ アルゴリズムとは ------------------------------------------------------------------------ e-Wordsによれば、アルゴリズムというのは、 「コンピュータを使ってある特定の目的を達成するための処理手順」 とのことです。 http://e-words.jp/w/E382A2E383ABE382B4E383AAE382BAE383A0.html また広義では、コンピュータに限らず、一般に、特定の目的を実現するための作 業手順を書き表したものをアルゴリズムといいます。 要するに、アルゴリズムとは、手順書のことです。 DOSのバッチファイルも、コマンドを書き連ねた手順書ですから、アルゴリズ ムの1種といえます。 ------------------------------------------------------------------------ ● 表記方法 アルゴリズムの表記方法としてよく使われるのは、以下の3つです。 ・日本語の文章(箇条書きを含む) ・フローチャート(流れ図) ・プログラミング言語 フローチャートが一番視覚的で分かりやすいのですが、メルマガ中に書くことは 困難ですので、説明は日本語表記を中心にして進めていくことにします。 ------------------------------------------------------------------------ ● 制御構造 アルゴリズムは通常、「順次」「選択」「反復」という3つの基本的な制御構造 の組み合わせで構成されています。この3種類の制御構造を駆使すれば、どのよ うなプログラムでも作成できるといわれています。 これはバッチファイルにも当てはまります。 すなわち、これらの制御構造さえ使いこなせれば、自在にバッチファイルを設計 することができるようになります。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 順次構造 ------------------------------------------------------------------------ 前から順に処理を行っていくだけの制御構造を、順次構造、または連続構造とい います。最も単純な制御構造です。 通常のアルゴリズムでは、特に明示しない限り、前に記述された処理から順に実 行されます。従って、ただ処理を書き連ねただけの構造が順次構造に該当します。 バッチファイルも、GOTOコマンドやIFコマンドなどを一部のコマンド以外は、書 き連ねたコマンドが上から順に1行ずつ実行される順次構造です。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 選択構造 ------------------------------------------------------------------------ 何らかの条件によって処理を分ける制御構造を、選択構造、あるいは分岐構造と いいます。条件としては、値の大小関係、文字列の一致不一致などがよく利用さ れます。 選択構造は、選択肢が2つのものと3つ以上のものに大別されます。 ------------------------------------------------------------------------ ● 単一選択 選択肢が2つの選択構造を、単一選択と呼びます。 下のバッチファイルは、「マイドキュメント」のファイルをフロッピーディスク にコピーした後、コピーできているかどうかをDIRコマンドで確認するものです。 -----(バッチファイルここから)----- XCOPY C:\MYDOCU~1 A:\ /D /E /H /R /Y /C IF NOT ERRORLEVEL 4 DIR A:\ /P -----(バッチファイルここまで)----- XCOPYコマンドは、コピー先となるフロッピーディスクがドライブに入っていな いときには、コピーを中止し、エラーレベルを4に設定します。 その場合はDIRコマンドを実行しても「準備ができていません.」とエラーにな るだけですから、DIRコマンドをスキップする(実行しない)ようにしておく必 要があります。 この機能を実現する部分が2行目のIFコマンドです。バッチファイル中では、選 択構造は通常、IFコマンドやGOTOコマンドによって実現されます。 ------------------------------------------------------------------------ ● 多岐選択 選択肢が3つ以上ある選択構造を、多岐選択と呼びます。 多岐選択では、以下のような構造がバッチファイル中でよく利用されます。 -----(バッチファイルここから)----- xcopy c:\mydocu~1 a:\ /d /e /h /r /y /c if errorlevel 5 goto ERR if errorlevel 4 goto ERR4 if errorlevel 3 goto ERR if errorlevel 2 goto ERR2 if errorlevel 1 goto ERR dir a:\ /p goto END :ERR echo XCOPYコマンドでエラーが発生しました.バッチ処理を中止します. goto END :ERR4 echo フロッピーディスクが挿入されていません.バッチ処理を中止します. goto END :ERR2 echo XCOPYコマンドがユーザによって強制終了されました.バッチ処理を中止します. goto END :END -----(バッチファイルここまで)----- XCOPYコマンドは、ユーザによって強制終了(Ctrl-C)されたときはエラーレベ ルを2に設定します。 また、先に説明したように、コピー先となるフロッピーディスクがドライブに挿 入されていないときには、エラーレベルを4に設定します。 これらのエラーを判別するため、このバッチファイルでは、XCOPYコマンドを実 行した後、エラーレベルの値によって、処理を以下の4通りに分けています。 ・エラーレベルが5以上、3または1 → echo XCOPYコマンドでエラーが発生しました.…… ・エラーレベルが4 → echo フロッピーディスクが挿入されていません.…… ・エラーレベルが2 → echo XCOPYコマンドがユーザによって強制終了されました.…… ・エラーレベルが0 → dir a:\ /p IFコマンドで処理を分岐させるときには、エラーレベルが大きい数字のものから 調べていることに注意して下さい。 「IF ERRORLEVEL 数字 コマンド」 という構文は、「ERRORLEVEL≧数字」のときにコマンドが実行されます。このた め、小さい数字のものから調べると、正しく処理を分けることができません。 なお、このバッチファイルでは主に小文字を使用し、「ERR4」「ERR」「END」な どといったラベル(GOTOコマンドのジャンプ先)のみ大文字としています。これ は、ラベルを目立たせ、処理の流れを分かりやすくするためです。 複雑な選択構造をGOTOコマンドで実現しようとする場合、処理の流れが非常にや やこしくなることがあります。ラベルを目立たせるこの手法、習慣づけておくと いいでしょう。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ 反復構造 ------------------------------------------------------------------------ 3つの制御構造のうち、最後の1つは反復構造です。ある条件を満たさなくなる まで(または満たすまで)特定の処理を繰り返す、ループ型の構造です。 反復構造には、前判定型と後判定型の2種類があります。 ------------------------------------------------------------------------ ● 前判定型 前判定型の反復構造では、条件判断を行った後に、反復対象となる処理を実行し ます。 以下に、前判定型の反復構造を用いたバッチファイルの例を示します。 -----(バッチファイルここから)----- set var=255 :START_LOOP if errorlevel %var% goto END_LOOP set /a var=var-1 goto START_LOOP :END_LOOP echo エラーレベルは%var%に設定されています. -----(バッチファイルここまで)----- このバッチファイルは、直前に実行したコマンドが設定したエラーレベルを調べ るものです。SETコマンドに用いているオプション「/A」は、計算式の入力を可 能にする、Windows2000,XP独自のものです。従って、このバッチファイルはこれ らのバージョンのWindowsでしか実行できません。 処理の流れは次のようになります。 はじめに、変数「var」の値を255に設定しておきます。 (255というのは、エラーレベルが取りうる最大の値です。) 次に、エラーレベルと「var」の値を比較します。エラーレベルが「var」以上の 値だった場合、ループを脱出してラベル「END_LOOP」に移動します。 脱出できなかった場合、SETコマンドによって「var」の値を1減らし、再びルー プの先頭にある条件判断文(IFコマンド)に戻ります。 ループを脱出した場合は、「var」の値を表示してバッチファイルを終了します。 ------------------------------------------------------------------------ ● 後判定型 後判定型の反復構造の場合、条件判断は、反復する処理の後に行われます。 先程のバッチファイルを後判定型の反復構造を用いて書き直すと、以下のように なります。 -----(バッチファイルここから)----- set var=256 :START_LOOP set /a var=var-1 if not errorlevel %var% goto START_LOOP echo エラーレベルは%var%に設定されています. -----(バッチファイルここまで)----- 後判定型の方がラベルの個数を減らせるので、若干読みやすいバッチファイルに なったでしょうか。 はじめに「var」を256に設定していることに着目して下さい。前判定のとき は255でしたが、後判定ではIFコマンドが実行されるより前に「var」の値が 1減らされるため、はじめに1つ大きい数字を代入しておく必要があります。 ------------------------------------------------------------------------ ● 両者の違い 前判定型と後判定型の違いは、処理が行われない可能性があるかどうかです。 前判定型では、判定条件によっては、反復部分の処理が1度も行われないままで ループを脱出してしまうこともあります。これに対し、後判定型では、必ず1度 は処理が行われます。 ------------------------------------------------------------------------ 今回はここまでです。 お疲れ様でした! 次号の予定は、「高度なファイル操作(2)」です。 ファイル操作のコマンド紹介は、次回がラストとなります。 なお、「バッチプログラミング(3)」は再来週を予定しています。 ユーザインタフェースについて取り上げます。 ----☆PR☆-------------------------------------------------------------- ┏━━━━━━━━━━━━━━━━━━┓★==========================☆ ┃Career UP!ITワークのお仕事┃   がんばる人の@ばる    ┗━━━━━━━━━━━━━━━━━━┛☆==========================★ ミ☆派遣情報、毎月15万件以上!                    ミ★希望情報を登録してお好みのお仕事がGET!             ミ☆技術を活かせて、さらに高給のお仕事もいっぱい!           ミ★今ならお仕事GETできた人に抽選で商品券5000円をプレゼント中!     ⇒ http://haken.val.ne.jp/atmarkit/atmarkit.html?banner_id=52    ---------------------------------------------------------------☆PR☆--- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ コメントをお待ちしています ------------------------------------------------------------------------ 皆さんからの感想・質問・要望をお待ちしています。 「こんなテーマを扱ってほしい」 「こんなことはできるの?」 「このへんが分かりにくかった」 「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