バッチファイルの中で、キーボードから入力した文字を利用して処理を行ってみましょう。
これを行うためには、まず何らかの方法でキーボードから入力された文字列を環境変数にセットしてあげる必要があります。
そしてその変数をバッチファイルの中で利用することを考えます。
さて、問題はキーボードから入力された文字列を、どのようにして環境変数に入れるかと言うことです。
通常のMS-DOSのコマンドには、このような便利なコマンドはありません。メニュー選択のところでご紹介した「BU.EXE」には、「LINEINPUT」というコマンドがあり、これをサポートしています。
ところが、このコマンドを使ってしまうと、このコマンドをインストールしていないコンピュータでは、せっかく作ったバッチファイルが動かなくなってしまいます。これはプログラムの互換性を保つという意味でもあまりよくありません。
そこで、キー入力にはMS-DOSの内部コマンドの一つ「COPY」コマンドを利用します。
「COPY」コマンドは、本来ファイルをコピーするコマンドですが、コピー元に「CON」を指定することで、コピー元がコンソール、つまりキーボード入力となります。
試しにプロンプトから以下のように入力してみてください。
COPY CON TEST.TXT
こうするとキー入力待ちの状態になりますので、何か適当に入力します。そうですねぇ、今回は「TomG」とでも入力してみましょうか。
入力が終わったら「Ctrlキーを押しながらZキー」を押してからエンターキーを押します。
TEST.TXTの内容をのぞいてみてください。
うまくいっていれば「TomG」とだけ書かれたファイルになっているはずです。
又、COPYコマンドには、二つのファイルを連結する機能もあります。たとえば、A.TXTとB.TXTを連結して「AB.TXT」にまとめるには次のようにします。
COPY A.TXT+B.TXT AB.TXT
この二つのCOPYコマンドの性質を利用して変数のセットを行います。
具体的には以下の手順になります。
1.内容が「SET NAME=」だけのファイル、「TEMP1.TXT」を作成します。このとき最後に改行をしたりしないでください。
2.バッチファイルの中でCOPYコマンドを利用して、入力内容の入った「TEMP2.TXT」を作成するように処理を記述しておきます。
3.バッチファイルの中で「TEMP1.TXT」と「TEMP2.TXT」を連結して「TEMP.BAT」を作成する処理を記述しておきます。
4.「CALL」文を用いて「TEMP.BAT」を呼び出す処理を行います。
それでは上記の1.の準備が出来ているものとして、早速作ってみましょう。
REM File Name KEYINPUT.BAT
@ECHO OFF
ECHO あなたの名前を入力してください。
ECHO 入力が終わりましたら 「Ctrlキーを押しながらZキー」を押した後、
ECHO エンターキーで決定してください。
COPY CON TEMP2.TXT
COPY TEMP1.TXT+TEMP2.TXT TEMP.BAT
CALL TEMP.BAT
DEL TEMP.BAT
DEL TEMP1.TXT
DEL TEMP2.TXT
ECHO あなたのお名前は%NAME%さんと入力されました。
いかがですか?バッチファイルに限らず、キーボードからの入力を受け付けて、それをプログラムの中で利用すると言うことは、大変重要なテクニックとなります。
ユーザーとコンピュータの間の情報伝達は、MS-DOSではキーボードが唯一の手段なのですから。