━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ いざというときに役立つMS−DOS 執筆:速星 千里 第31号(2003.11.08) バッチプログラミング(1) 5917部配信 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <目次> ■ メルマガ交換広告 ■ はじめに ● バッチファイル募集 ● ウイルス「W32/Mimail.c@MM」に注意 ■ IFコマンド ● 環境変数の利用 ● NOT ● EXIST ● ERRORLEVEL ■ GOTOコマンド ■ コメントをお待ちしています ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ メルマガ交換広告 ------------------------------------------------------------------------ ----☆PR☆-------------------------------------------------------------- ■━━【 リスニング耳マガジン 】━━━━━━━━━━━━━━━━━━■       ★…他の教材で失敗したあなたへ・・・緊急朗報!   〓 麻 酔 手 術 の 覚 醒 時 に 英 語 を ペ ラ ペ ラ と ! 〓 「不思議な体験をしました、左足膝蓋骨骨折、全身麻酔をされ、手術が終 わりました。覚醒時、見舞客が大勢きておられ、誰が誰だか分かりません でしたが、日本語が出てこなく、英語がポンポン出てきました。」 この手術の後の不思議な経験を懇意にしているドクターに聞くと「そんな 話を友人のドクターもしていたよ。」と言っていました。 ●その秘密は・・・HPでこっそり公開しています。。 http://www.cyber104.com/tetrahedrane/   ★…英聴リスニング研究会 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ---------------------------------------------------------------☆PR☆--- 広告掲載に関するお問い合わせは tetrahedrane@yahoo.co.jp まで ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ はじめに ------------------------------------------------------------------------ 皆さん、こんにちは。速星です。 発行が半日ほど遅れ、ご迷惑をお掛けしました。 今回は、バッチファイルを活用するために必要なコマンドを2つ紹介します。 ------------------------------------------------------------------------ ● バッチファイル募集 メルマガ中で紹介するバッチファイルを募集します。 実際に自分で使っているもの、メルマガを読んで作ってみたものなど、下記メー ルアドレスまで気軽に投稿して下さい。 tetrahderane@yahoo.co.jp なお、バッチファイルは原則として無編集の状態で掲載します。 著作権を主張される場合は、バッチファイル中に以下のように記述して下さい。 記述がない場合、著作権を放棄したものとみなします。 (記述例) ECHO Copyright (c) 2003 Chisato Hayahoshi ------------------------------------------------------------------------ ● ウイルス「W32/Mimail.c@MM」に注意 10月31日にウイルス「W32/Mimail.c@MM」(ミメイル・シー)が感染を拡大 しつつあります。ご注意下さい。 http://sec.sourcenext.info/virus/details/mimail_c.html これはメールを経由して増殖するウイルスです。メールの件名は、 「Re[2]: our private photos」 のような文字列を含むとのことです。 添付ファイル内の実行ファイルを開くとウイルスに感染します。 感染すると、ウイルス添付メールが大量送信されます。その際、メールソフトに は送信記録が残らないため、感染の発見が遅れ、その間に被害が拡大する可能性 があります。ウイルス対策ソフトウェアの導入などによって予防に努めて下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ IFコマンド ------------------------------------------------------------------------ バッチファイル中で、実行時の状況によって実行するコマンドを動的に変更する 場合に使用するのがIFコマンドです。 基本的な書式は、以下のようになります。 「条件」が成立した場合にのみ、「コマンド」が実行されます。 IF 条件 コマンド ------------------------------------------------------------------------ ● 環境変数の利用 IFコマンドの条件文では、文字列同士を「==」で連結することによって、文字列 の比較を行うことができます。このため、特定の環境変数の内容によって、バッ チファイルの動作を変化させる ことができます。 例えば、以下のようになります。 > IF %WINDIR%==C:\WINDOWS ECHO WindowsディレクトリはC:\WINDOWSです. これをバッチファイルに記述して実行すると、Windowsが「C:\WINDOWS」にイン ストールされている場合、以下のように表示されます。 IFコマンドの条件が成立して、ECHOコマンドが実行されている様子が分かります。 > C:\WINDOWS>IF C:\WINDOWS==C:\WINDOWS ECHO WindowsディレクトリはC:\WINDOWS > WindowsディレクトリはC:\WINDOWS また、Windowsが「C:\WINDOWS」以外のディレクトリにインストールされている 場合は以下のように表示されます。 IFコマンドの条件が成立しないため、ECHOコマンドは実行されません。 > C:\WINNT>IF C:\WINNT==C:\WINDOWS ECHO WindowsディレクトリはC:\WINDOWS ------------------------------------------------------------------------ ● NOT 条件文の頭に「NOT」をつけると、条件判定の真偽を逆にすることができます。 先程の例でいえば、 > IF NOT %WINDIR%==C:\WINDOWS ECHO Windowsディレクトリ≠C:\WINDOWSではない のように記述することになります。 結果は先程と逆で、Windowsが「C:\WINDOWS」にインストールされている場合は、 > C:\WINDOWS>IF NOT C:\WINDOWS==C:\WINDOWS ECHO Windowsディレクトリ≠C:\WINDOWS また、他のディレクトリにインストールされている場合、 > C:\WINNT>IF NOT C:\WINNT==C:\WINDOWS ECHO Windowsディレクトリ≠C:\WINDOWS > Windowsディレクトリ≠C:\WINDOWS というようになります。 ------------------------------------------------------------------------ ● EXIST IFコマンドでは「EXIST ファイル名」という条件文も利用できます。ファイルが 存在するかどうかでバッチファイルの動作を変えるときに利用します。 なお、ファイル名はドライブ名やパスを併せて指定できます。 例えば、 > IF EXIST COMMAND.COM ECHO カレントディレクトリにはCOMMAND.COMがある と記述したバッチファイルを実行すると、そのディレクトリにCOMMAND.COM(第 9号参照)があれば「カレントディレクトリにはCOMMAND.COMがある」と表示さ れます。 「NOT」と組み合わせて利用することもできます。その場合、書式は以下のよう になります。 IF NOT EXIST ファイル名 コマンド ------------------------------------------------------------------------ ● ERRORLEVEL 多くのコマンドは、終了時にエラーレベルと呼ばれる値をDOSに通知します。 エラーレベルの値にはコマンドごとに固有の意味がありますが、大抵の場合、そ のコマンドが成功したときは0、失敗したときは0以外の値となっています。 これを利用すれば、コマンドが成功したか失敗したかでバッチファイルの動作を 変えることができます。 書式は次のようになります。エラーレベルの値が「数字」以上だった場合に、後 のコマンドが実行されます。 IF ERRORLEVEL 数字 コマンド 例えば、XCOPYコマンドは、コピー先のフロッピーディスクドライブにディスク が入っていなかった場合、エラーレベルを4に設定します。 > XCOPY C:\COMMAND.COM A:\ > IF ERRORLEVEL 4 ECHO コピー失敗 > IF ERRORLEVEL 0 ECHO コピー成功 上の内容のバッチファイルを実行すると、正しくコピーが行われた場合、次のよ うに表示されます。 > C:\>XCOPY C:\COMMAND.COM A:\ > COMMAND.COM > 1 個のファイルをコピーしました。 > > C:\>IF ERRORLEVEL 4 ECHO コピー失敗 > > C:\>IF ERRORLEVEL 0 ECHO コピー成功 > コピー成功 一方、フロッピーディスクが入っていなかった場合、以下のようになります。 「失敗」「成功」の両方のメッセージが表示されてしまうことに注意して下さい。 エラーレベルの条件判断は「ERRORLEVEL≧数字」だからです。 > C:\>XCOPY C:\COMMAND.COM A:\ > 無効なパスです - a:\ > デバイスの準備ができていません。 > 0 個のファイルをコピーしました。 > > C:\>IF ERRORLEVEL 4 ECHO コピー失敗 > コピー失敗 > > C:\>IF ERRORLEVEL 0 ECHO コピー成功 > コピー成功 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ GOTOコマンド ------------------------------------------------------------------------ バッチファイルでは通常、上から順に1行ずつコマンドが実行されます。これに 対し、特定の行に移動するために用いるのがGOTOコマンドです。 GOTOコマンドを使うときは、あらかじめ同一バッチファイル中にラベル(コロン で始まる行)を記述しておき、「GOTO ラベル」の書式で移動先を指定します。 下の例を参照して下さい。 > ECHO 1行目 > GOTO LABEL > ECHO 2行目 > :LABEL > ECHO 3行目 このバッチファイルを実行すると、次のように表示されます。「ECHO 2行目」 というコマンドが実行されていないことが読み取れます。 > C:\>ECHO 1行目 > 1行目 > > C:\>GOTO LABEL > > C:\>ECHO 3行目 > 3行目 GOTOコマンドの使用法については、第34号で詳しく紹介する予定です。 ------------------------------------------------------------------------ 今回はここまでです。 お疲れ様でした! 次号の予定は、「高度なファイル操作(1)」です。 便利なファイル操作コマンドをいくつか紹介します。 なお、「バッチプログラミング(2)」の内容はアルゴリズム入門です。 第34号(11月29日)を予定しています。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■ コメントをお待ちしています ------------------------------------------------------------------------ 皆さんからの感想・質問・要望をお待ちしています。 「こんなテーマを扱ってほしい」 「こんなことはできるの?」 「このへんが分かりにくかった」 「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