====================================================== 2000.03.27 ======
              Windows 95/98 管理人のための MS-DOS 基礎講座
------------------------------------------------------------------------
                        第 5 回 バッチファイルの話
========================================================================

	こんにちは。でるもんた・いいじまです。

=-=-=-=-=-=-=-==-=-=-=-=-=-=-=--=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-
☆読者のお便りから - 前回の補足☆

	●前回、concon バグのことを紹介しておられましたが、手元の環境
	 (Eudora Pro 4.2)では、メール本文中の file:///…/con.gif という
	 文字列をクリックしなくても、マウスカーソルをそこに置くだけでハン
	 グアップしました。

		→文面から推察すると、マウスカーソルをそこに置いただけで
		 ファイルを読みに行くようです。設定変更で回避できるとは
		 思いますが、手元に Eudora Pro の環境がないのでそれ以上
		 のことはわかりません。

		※ちなみに、マイクロソフトでは英語版のパッチをすでに出して
		 います。日本語版はすでにあるようですが、公式 Web ページ
		 http://www.microsoft.com/japan/security/ にはまだ日本語版
		 パッチの情報は流れていないようです。

	●「dir|more」で一画面ぶんずつ表示されるということはわかったのです
	 が、うっかり、何の引数もなしで「more」と入力したら終了できなくな
	 り、やむなく強制終了しました。このときは何が起こっていて、どう対
	 処するのが正しいのでしょうか?

		→このケースの場合、more コマンドには何の引数もありません
		 から、more は標準入力からの入力を待っています。では、この
		 場合、標準入力はどこか? キーボードですよね。つまり、この
		 more は、「キーボードからの入力を受け取って、標準出力
		 (=画面)に表示する」という動作をしています。

		 この場合の対処方法はいくつかあって、
			○大抵のコマンドは、【Control+C】で強制終了できます。
			○キーボードからの入力の場合、前回出てきた
			 copy con nantoka.txt の場合と同様に、【Control+Z】
			 を押してから【Return】を押すと、そこで入力終了と
			 いう意味になります。
			○more の場合、画面いっぱい(通常は 23〜24 行)に
			 達するごとに「-- 続く --」という表示が出ますが、
			 ここで【Q】を押すと more コマンドは終了します。
		 のどれかになります。

		 「Control+英字」の組み合わせは他にもいくつかあるので、
		 後日まとめてご紹介したいと思います。

=-=-=-=-=-=-=-==-=-=-=-=-=-=-=--=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-
☆本日のお題☆

	今回は「バッチファイルの話」です。

	バッチファイル(batch file;MS-DOS 以外の OS では、シェルスクリプト
	shell script と呼ばれることもあります)とは、一言でいうと、「コマン
	ド A、B、C を順に実行する」ということを頻繁に繰り返すような場合に、
	そのコマンドをテキストファイルに書いておけば、そのファイル名を指定
	するだけで順番に実行してくれるというものです。

	この「バッチファイル」という概念も、GUI にはない、非常に便利なもの
	です。というのは、GUI で行う操作は、
		1. ××をクリックする
		2. ウィンドウが開くことを目で確認
		3. △△の位置を目で確認する
		4. △△の位置にマウスカーソルをあわせる
		5. △△をクリック
	…という手順を踏むのが普通なのですが、特に 3. の部分が、言葉
	(テキスト)では簡単に表現し難しい場合が多々あるからです。

=-=-=-=-=-=-=-==-=-=-=-=-=-=-=--=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-
☆予備知識☆

	このマガヂンでは、Windows の操作・管理についてある程度の予備知識が
	あることを前提に話を進めています。今回の記事では、次の概念はすでに
	知っているものとして話を進めさせていただきますのでご了承ください。

		○ファイル・ディレクトリとは、拡張子とは
		○テキスト(.txt)ファイル
		○Windows を safe mode で起動する

	また、前回までに説明した次の概念も重要ですので、曖昧なところがある
	場合はしっかり復習しておいてください。

		○dir コマンド(第 1 回)
		○カレントディレクトリ・カレントドライブとは(第 2 回)
		○copy/del コマンドの基本(第 3 回)

	なお、第 3 回までは、コマンドの後にリターンキーを入力することを示
	すために【リターンキー】とことわっていましたが、読者のみなさまはも
	うおわかりだと思いますので、第 4 回からは省略させていただいています。
	つまり、特に断り書きがない限り、コマンドを打ち込んだらリターンキー
	を押すようにしてください。

=-=-=-=-=-=-=-==-=-=-=-=-=-=-=--=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-
☆バッチファイルとは - 簡単な例☆

◇バッチファイルを作る

	バッチファイルを作るのは非常に簡単です。テキストエディタ(メモ帳)
	で、たとえば次のように書いてください。

		------この次の行から-------
		date
		pause
		dir
		------この上の行まで-------

	そして、このファイルを、拡張子 .bat(batch の略ですね)をつけて
	保存してください。かりに、test.bat に保存したとします。

	【補足】このとき、メモ帳や Windows の設定によっては、「test.bat.txt」
	    という名前になってしまうことがあります。詳しくは、第 1 回の
	    中の「最後の手段、ショートカット & バッチファイル」という
	    ところを参照してください。

	そして、MS-DOS プロンプト上でつぎのように入力します。

		C:\Windows> cd "\My Documents"		←test.bat がある場所
		C:\My Documents> test.bat

	とすると、次のように表示されます。

		C:\My Documents> date
		現在の日付は 2000-03-27 (月)
		日付を入力してください(年-月-日):	←リターンキーを押す

		C:\My Documents> pause
		続けるにはどれかキーを押してください . . .
			←もういちどリターンキーを押す

		C:\My Documents> dir

		 ドライブ C: のボリュームラベルは  WINDOWS 98
		 ボリュームシリアル番号は 0464-1C05
		 ディレクトリは C:\My Documents

		.              <DIR>        00-03-14  18:30 .
		..             <DIR>        00-03-14  18:30 ..
			(以下略)

	このように、プロンプトから test.bat と入力すると、test.bat に書か
	れているコマンドが順に実行されます。また、コマンドラインから
	test.bat と入力するかわりに、Explorer などで test.bat をダブルクリ
	ックするという方法もあります。

	【補足】pause は、「リターンキーが押されるまで待っている」という
	    コマンドで、こういうバッチファイルの場合に威力を発揮します。

◇実例 - Web サイトのアップロード前に…

	私の場合、web サイトの内容をサーバーにアップロードする前に必要な
	処理に、バッチファイルを使っています。

	私の場合、web サイトのアップロードの前には、次のような作業が毎回
	必要になります。

		○自作の Perl スクリプトや各種ソフトの設定ファイルなどを
		 web 上で公開しているので、それらをふだん使う場所から
		 web サイトのイメージが置いてあるディレクトリにコピーする

		○テキストエディタで web サイトを編集していると、拡張子
		 .bak のバックアップファイルができるので、アップロード前に
		 消しておく

	そこで私は、次のような内容のバッチファイルを用意しています。
	(これは説明用のもので、実際のものとは異なります。)

		----------ここから----------
		c:
		cd \home\delmonta
		copy .emacs www\emacs\.
		copy bin\xrename.pl www\perl\.

		dir www\*.bak /s
		pause
		----------ここまで----------

	このようにバッチファイルにすると、必要な作業を忘れてしまうという
	ことがなくなります。
=-=-=-=-=-=-=-==-=-=-=-=-=-=-=--=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-
☆echo について☆

	さて、上のようなバッチファイルでは、どんなコマンドが実行されたのか
	が毎回表示されます。しかし、実際には、わざわざ表示されても特に意味
	がなく、かえってうっとうしいだけの場合が多いでしょう。

	そのため、この表示をやめさせることができます。

◇echo off

	そこで、バッチファイルの先頭に echo off と書きます。

		------この次の行から-------
		echo off
		date
		pause
		dir
		------この上の行まで-------

	そうすると、最初の
		C:\My Documents> echo off
	は表示されましたが、それ以降の
		C:\My Documents> date
		C:\My Documents> pause
		C:\My Documents> dir
	は表示されなくなります。

	【補足】ちなみに、バッチファイルではなくコマンドライン上で
	    echo off と入力すると、プロンプトが表示されなくなります。
	    これを元に戻すには、echo on と入力してください。
	    (バッチファイル上でも echo on は使えます。)

◇@ を使う

	echo off で出なくなるとはいっても、最初の echo off と表示されて
	しまうのも格好悪いものです。そこで、MS-DOS 5.0(たぶん)から、

		コマンド名の前に @ というマークをつければ、echo on で
		あっても、そのコマンドを実行したことは表示しない

	というルールが設けられました。つまり、たとえば

		------この次の行から-------
		date
		@pause
		dir
		------この上の行まで-------

	とすると、
		C:\My Documents> date
		C:\My Documents> dir
	は画面に表示されますが、
		C:\My Documents> pause
	は表示されなくなります。

	実際には、
		------この次の行から-------
		@echo off
		date
		pause
		dir
		------この上の行まで-------
	とするのが一般的です。

	【補足】第 1 回では、MS-DOS プロンプトの出し方のひとつとして、
	    「@command」または「@cmd」とだけ書いたバッチファイルを
	    紹介しましたが、この @ には、じつはこういう意味があった
	    のです。
=-=-=-=-=-=-=-==-=-=-=-=-=-=-=--=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-
☆バッチファイルならではの構文☆

	バッチファイルでは、色々なことをするために、コマンドラインでは役に
	立たないような複雑な構文が使えるようになっています。たとえば、すでに
	でてきた pause がそうで、いちおうコマンドラインからも使えますが、
	バッチファイルで使わないと役に立ちません。

	このような構文については話すと長くなるので、詳しいことは後日にして、
	簡単なものをいくつかご紹介したいと思います。

◇echo 文

	echo 文は、前回第 4 回でも出てきましたが、引数をそのまま画面(正確に
	いえば標準出力)に表示するコマンドです。たとえば、

		echo hello, world.

	とすると、「hello, world.」と表示します。

	ただし、「echo off」「echo off」と、引数なしの「echo」だけは特別な
	意味があります。echo off、echo on は、バッチファイルに書いてある各
	コマンド名を表示するかしないかを決めるためのもので、引数なしの echo
	は、いま echo off なのか echo on なのかを表示します。

	【余談】実際に「off」という文字列、「on」という文字列、または改行
	    だけの空行を表示するには、「echo.off」「echo.on」「echo.」
	    とします。

	    なお、「echo. 」のように、ピリオドのあとにスペースを入れる
	    と、そのスペースも表示されます。とくに、第 4 回で扱ったリダ
	    イレクト・パイプで echo を使用する場合は注意してください。

◇rem 文

	rem(remark の略です)文は、書いてあっても何もしません。echo 文と
	違って、引数画面に表示したりもしません。バッチファイル中に、人間が
	読むための注釈を入れておくために使います。

◇goto 文

	goto 文は、プログラミングの知識のある方にはおなじみのものですが、
	意味はそのものズバリ「go to」、つまり、次の行には行かずに、引数で
	指定した場所に行きます。

	実際には if 文と併用することが多いのですが、今回は if 文はまだ
	紹介していないので、それ以外の使用例を下では紹介します。

◇実例 - フロッピーのコピーを大量に作る

	次の例は、「同じ内容のフロッピーを何組も作る」という目的のための
	バッチファイルです。いままでの内容の総復習をかねて、どういうことが
	行われているのかを確認してみてください。

	--------------------------------ここから--------------------------
	@echo off
	echo 2 枚組フロッピーの大量複製支援バッチファイル
	echo.

	:again

	rem ここは、「pause 1 枚目の…」でもいい場合もあるが、
	rem ダメな場合もあるのでこのようにしています。
	echo 1 枚目のフロッピーを挿入してください。

	rem "> nul" は第 4 回で扱ったリダイレクト。意味が分から
	rem なければ無視してよい。なお、rem 中の ">" は引用符で
	rem くくる必要がある。
	pause > nul

	copy disk1\*.* a:

	rem 以下、1 枚目と同じ
	echo 2 枚目のフロッピーを挿入してください。
	pause > nul
	copy disk2\*.* a:

	echo これで終わりにする場合は Control+C を押してください。
	echo 続ける場合は単に Return を押してください。
	pause > nul

	goto again
	--------------------------------ここまで--------------------------

=-=-=-=-=-=-=-==-=-=-=-=-=-=-=--=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-
☆autoexec.bat☆

	じつは、コンピュータが起動したときに自動的に実行されるバッチファイル
	があります。ルートディレクトリにある autoexec.bat です。
	なお、autoexec.bat は「おーとえぐぜっく・ばっと」と発音します。

	【補足】exec は execute(実行する)の略です。つまり、そのものずばり、
	    自動的(auto)に実行(execute)されるバッチファイル、です。

	つまり、この autoexec.bat に何か加筆すれば、そのコマンドがコンピュ
	ータの起動時(MS-DOS プロンプトを開いたとき、ではありません。念の
	ため。)に毎回実行されるのです。

◇警告! 下手をするとソフトが起動しなくなります

	この autoexec.bat には、非常に重要なことが書いてある場合があります。
	したがって、不用意に書き換えると、Windows やその他のソフトが正しく
	起動しなくなる危険性があります。

	ですから、autoexec.bat を書き換える前に、元の autoexec.bat のバック
	アップをきちんととるようにしてください。

	もし、autoexec.bat を書き換えて再起動して、うまくいかなくなって
	しまったときには、Windows 95/98 ならば safe mode で起動すれば
	autoexec.bat の内容は無視されますので、safe mode で起動して、メモ
	帳で書き換えるなどしてください。

	それ以外の環境については、いろいろと説明しなければいけないことが
	多いので、後日に回させていただきたいと思います。

◇実例

	では、autoexec.bat で実行したいことは何か、というと、私の場合、
	次のようなことが思い浮かびます。

		○c:\windows\win386.swp というファイルが必要以上に大きく
		 なったり、壊れた状態になったりするので、いったん消したい

		○いつコンピュータを起動したのか、細かい記録をとりたい

	そこで、私の場合、autoexec.bat に次のように書き込みました。

		del \windows\win386.swp
		echo.| date >> boottime.txt
		echo.| time >> boottime.txt

	下の「echo.| date >> boottime.txt」というところは、第 4 回で扱った
	「リダイレクト・パイプ」を使っていますので、わからない方は第 4 回を
	読み返してみてください。

	【余談】(1)win386.swp というのは、スワップファイルといって、Windows
	       が勝手に作るファイルです。ここでは本筋から外れるため説明を
	       省きますので、興味のある方は検索エンジンなどで「win386.swp」
	       「スワップファイル」などをキーにして検索してみてください。
	    (2)記録を取るファイル名の boottime.txt は、本当ならば bootlog.
	       txt とでもしたいところですが、この bootlog.txt は Windows
	       が別の目的で使いますので、bootlog.txt を使うと、記録が
	       消えてしまうことがあります。

=-=-=-=-=-=-=-==-=-=-=-=-=-=-=--=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-
☆UNIX がわかる人のために☆

	MS-DOS のバッチファイルは、もちろん UNIX のシェルスクリプトにあたる
	ものです。が、MS-DOS では「#!/bin/csh」のような記法が使えません。
	また、echo コマンドの仕様が MS-DOS と UNIX とでは微妙に違いますので、
	注意してください。

=-=-=-=-=-=-=-==-=-=-=-=-=-=-=--=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-
☆まとめ - 本日のキーポイント☆

	今回は、バッチファイルの使い方について、基本的なところに絞って
	解説しました。バッチファイルには色々と面白い使い方があるのですが、
	このマガジンの当面の目標は「Windows のメンテナンス・再インストール
	に必要な MS-DOS の知識を身につける」ということですので、バッチファ
	イルの詳しいことは、Windows のメンテナンスの話が一段落してから、
	またあらためて書きたいと思います。

◇重要ポイント

	○拡張子 .bat をつけてから、ファイル名入力
	○echo の使い方いろいろ
	○@ の使い方
	○pause、rem の使い方

◇発展編

	○goto の使い方
	○autoexec.bat

=-=-=-=-=-=-=-==-=-=-=-=-=-=-=--=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-
☆次回予告☆

	次回は「第 6 回 環境変数と PATH の話/内部コマンドと外部コマンド」
	です。新しいコマンドを追加するにはどうすればいいか、というお話です。

	次回までで、MS-DOS の基礎的な使い方はいったん終わりです。そのあとは、

		○MS-DOS の起動時には何が行われているのか
		○MS-DOS を動かすために最低限必要なファイルは何か
		○MS-DOS のメモリ管理の問題
		○デバイスドライバのインストールの仕方

	といった、OS のメンテナンスに必要な知識を重点的に説明したいと
	思います。

	それではまた♪

========================================================================
メエルマガヂン Windows 95/98 管理人のための MS-DOS 基礎講座

☆発行人☆

        でるもんた・いいじま <L94102@mail.ecc.u-tokyo.ac.jp>
                        http://user.ecc.u-tokyo.ac.jp/~l94102/dos/

                ※このメールマガジンで取り上げてほしいテーマ、ご意見など
                 ありましたら、上のメールアドレスまでお気軽にどうぞ。

☆配信☆
        このメールマガジンは、「インターネットの本屋さん・まぐまぐ」を
        利用して配信しています。
                http://www.mag2.com     (マガジン ID=0000022456)

☆バックナンバー・登録解除・メールアドレス変更は☆

        上記のホームページまでどうぞ。
        なお、手動での登録解除は行っておりませんのでご了承下さい。
=========================================================================

Copyright © IIJIMA Hiromitsu aka Delmonta, 2016/03/10 15:09 JST
これは「古文書」です。 古くなった情報も原則未修正で保存していますのでご注意ください。

古文書本館トップ | 電脳外道学会