• 締切済み

DOSコマンドで、YES,NO条件を加えたい。

件名のとおりで、DOSコマンドでバッチを作成し、 実行した後に、 「プログラムを実行しますか?」 y/n というYesNo判別で、yを押すと実行される ようなものを作るにはどうすればよいでしょうか。

みんなの回答

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.3

1アクション増えてしまいますが、NT系OSでも こんな感じならできます。 IF文以降はご随意に修正してください。 echo プログラムを実行しますか? echo (Y/N)を入力してエンターしてください set /p choice= set choice=%choice:y=Y% if "%choice%" == "Y" (echo Yesを選択) else (echo Noを選択)

7_11shop
質問者

補足

OSはWindows2000SP4です。 (echo Yesを選択) の部分にYesの処理内容を入れれば よいと理解していますがよろしいでしょうか。 このようにすると下記のようになります。 C:\Documents and Settings\t_takemura\デスクトップ>echo プログラムを実行しますか?プログラムを実行しますか? >echo (Y/N)を入力してエンターしてください(Y/N)を入力してエンターしてください >set /p choice= という文が表示されこの後にYを押してもNを押しても、DOS画面が閉じるだけで、何も処理がされていないようです。

  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.2

まさにそういう目的にピッタリのツールがあります。 大昔からある、知る人ぞ知る“BU”というものです。(参考 URL) これを使って、以下のようにバッチファイルを組んでみて下さい。 ----- @echo off bu -nYESNO LINEINPUT 実行しますか? if "%YESNO%"=="y" goto yes ("n" の場合の処理) goto next :yes ("y" の場合の処理) :next ----- 2行目が BU のサンプルですが、「実行しますか?」と表示し、y または n を入力すると、それぞれの処理に飛ばすことができます。 (Windows98SE で確認しました。他の Windows については、残念ながらよくわかりませんが、if も goto も標準機能だと思われるので、まず大丈夫でしょう。)

参考URL:
http://hp.vector.co.jp/authors/VA000007/bu.htm
7_11shop
質問者

お礼

残念ながら、「BU」はうまく動きませんでしたが、 いろいろ探していたら、似た機能を持つ、「KR」という ものが見つかり、それだとうまくいきました。http://www.nifty.com/forum/fpcu/ ありがとうございます。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 う~ん・・・・。Windows 98までならchoice.exeというコマンドがあったのだが(Meは知らない)、Windows 2000やXPでは無いんだな。  なので、C言語等でキーコードを調べてERRORCODEに返すプログラムを自作するのが良いだろう。Cのコンパイラは、BCCでもMicrosoft VCC(CL)でも現在は無償提供されているので、開発に困る事は無いだろう。  または、バッチではなくWindows Scripting Hostで作成するという方法もある。  参考までに、以前私が作成したchoiceex.exeのソースを掲載する。ちなみにエラーチェック等は外してあるので適時補って欲しい。VC++やBCCでコンパイルできるはずだ。 #include <windows.h> #include <conio.h> #define FLASHKEY() {while(_kbhit()) getch();} int usage() { printf("Usage\n"); printf(" -h : Print Help and Exit.\n"); printf(" -? : equal to -h.\n"); printf(" -v : Verbose Mode. Display Progress.\n"); printf(" -c : Choice Mode. Return KeyCode inputed key in Interval.\n"); printf(" -t <Time> : Time to Sleep (milliseconds). Default 5000 \n"); printf(" choiceex.exe -t 10000 -v\n"); return 0; } int main(int argc, char **argv) { long interval = 5000; long verbose = FALSE; long choice = FALSE; while(--argc > 0) { ++argv; switch(**argv) { case '-': case '/': switch(*(*argv + 1)) { case 'h': case 'H': case '?': usage(); return 0; break; case 't': case 'T': interval = atol(*(argv + 1)); break; case 'v': case 'V': verbose = TRUE; break; case 'c': case 'C': choice = TRUE; break; default: printf("Invalid Option %s\n", *argv); usage(); return 0; } } } while(interval > 0) { if(verbose) printf("resume in %d MilliSeconds...\n", interval); Sleep(100); interval -= 100; if(choice && _kbhit()) { return getch(); } FLASHKEY(); } if(verbose) printf("Done.\n"); FLASHKEY(); return 0; }

関連するQ&A