2005-04-24
ちょっと必要があって、久し振りにバッチファイルを作っていました。 永らく使っていませんが、昔の記憶を頼りに作ります。 時々は触るのでだいたいの所は覚えているのですが、やはり忘れている事も多いのです。
バッチファイルの途中でキー入力を受け付けるコマンドに、BATKEY と言うのがあった筈です。 これを使おうと思ってヘルプを見るのですが、見つかりませんって…。
>batkey /? 'batkey' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
ネットで情報を漁ると、どうやら BATKEY は NEC が(PC-9801用の)MS-DOS で独自に追加したコマンドのようです。 Ver.3.3 の頃からだとか。 その後、いわゆる DOS/V機で動作する MS-DOS や IBM の PC-DOS では CHOICE というコマンドが追加されているようです。 あー、言われてみれば、そんなの有ったかも。 DOS/V 乗り換えと同時に Windows95 を使い始め、バッチファイルから遠のいてしまったので、よく覚えていません。
Windows98 なら、CHOICE が入っているようです。
WindowsXP には入っていないようです。
WindowsNT 系は皆同じかも。
ネットで探せばたくさん公開されていそうですが、単純な仕様なら作る方が早そうです。 要するに1文字入力して、入力に応じた終了コードで終了するプログラムですから。 CHOICE は入力タイムアウトするスイッチが用意されているみたいで、作るとなると面倒そうですし。
スイッチはネットで調べてそれっぽく。
batkey {0|1|2} prompt 0 ... 1桁の数字(0-9)を入力。0(0)〜9(9) を返す 1 ... Yes/Noを入力。 0(y) または 255(n) を返す 2 ... 1文字入力。文字コードを返す prompt ... プロンプトメッセージ
ソースコード。
簡単なのです。
でなきゃ自作しません。(^_^)
いろいろ言いたい事やアドバイスのある人は、掲示板辺りにどうぞ。
とりあえず VC ver.5 でコンパイルしたものを用意しました。
batkey.lzh 12,781Byte
これで例えば仕事中に BATKEY が必要になっても大丈夫。 環境があれば、ソースをコピペで対応可能。 誰かに使って貰おうってんじゃなく、自分のため。 まぁ、Windows95 以来今まで必要じゃなかったから、今後そんな事があるとも思えませんが…。
batkey.c
#include <stdio.h> #include <ctype.h> void showHelp(); int main( int argc, char *argv[] ) { int c; /* 入力した文字 */ int r = 0; /* batkeyの返り値 */ int i; /* ループカウンタ */ if( argc < 2 ) { showHelp(); return( 0 ); } /*-----------------------*/ /* プロンプト表示 */ /*-----------------------*/ if( 2 < argc ) { for( i=2; i<argc; i++ ) { printf( "%s", argv[i] ); } } /*-----------------------*/ /* キー入力受付 */ /*-----------------------*/ switch( *argv[1] ) { /* 0-9 */ case '0': while( 1 ) { if( isdigit ( c = (int)getchar() ) ) { r = c - (int)'0'; break; } } break; /* yes/no */ case '1': while( 1 ) { c = (int)getchar(); if( toupper( c ) == 'Y' ) { r = 0; break; } if( toupper( c ) == 'N' ) { r = 255; break; } } break; /* ascii code */ case '2': while( 1 ) { if( isprint( c = (int)getchar() ) ) { r = c; break; } } break; default: showHelp(); break; } /*-----------------------*/ /* 結果を返す */ /*-----------------------*/ return( r ); } void showHelp() { /*-----------------------*/ /* 使用法 */ /*-----------------------*/ printf( "usage:\n" ); printf( "batkey [{0|1|2}[ prompt]]\n" ); printf( " 0 ... 1桁の数字(0〜9)を入力します. 0(0)〜9(9) が返ります.\n" ); printf( " 1 ... Yes/No を入力します. 0(y)または255(n) が返ります.\n" ); printf( " 2 ... 1文字入力します. 文字コードが返ります.\n" ); printf( " prompt ... プロンプトメッセージ\n" ); }