• 締切済み

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

  • DOSコマンドの削除で・・・

    DOSコマンドを使って、指定ファイルの削除バッチを作成し、タスク管理で自動実行しようと試みたのですが、DOS窓でy/nの返答を返さないと先に進まず自動的に実行が出来ません。 いい方法があれば教えてください。

  • DOSのコマンドがわかりません

    Windows(95,98,NT,2000)上で作動するバッチファイルを作っています。 そこで、ユーザに、本当に処理を実行して良いか(y/n)で判断させるようなロジックにしたいのですが、判定させるコマンドがわかりません。 CHOICEコマンドも使ってみたのですが、CHOICEコマンドを実行させるためのCHOICE.comは、NT,2000には標準で無いらしいのです。 何か95,98,NT,2000に共通のコマンドがありましたら、教えて下さい!

  • MS DOS Copyコマンドについて

    MS DOSのバッチファイルを作成しようと思って次のように作成して実行しましたら上手くいきました。 copy C:\SSD F:\SSD 次にProgram Filesにあるフォルダーを次のコマンドで実行しましたがうまくいきません。 copy C:Program Files\SSD F:\SSD どうしてでしょう教えて下さい。

  • echo y | で自動応答

    コマンドプロンプトで、あるvbsを以下のように実行します。  cscript test.vbs すると以下のようにYesNo判別で、yを押すとプログラムが実行されます。  「プログラムを実行しますか?」 y/n その後、以下のようなYesNo判別で、yを押すと自動設定処理が開始されます。  「自動設定しますか?」y/n 2回の問いには、2回とも「y」と応えたいのですが、 自動的に「y」と応えるにはどうやればよいですか? echo y | を使えばできるのでしょうか? やり方、ヒントでも良いので教えて下さい。 OSはwindows xp professional sp3です。 vbs自体に変更を加えることはできません。

  • DOSコマンドについて

    ご教授お願いします。 Windows Server 2003において、 DOSコマンドによるバッチを作成するにあたり ファイルを圧縮する設定/方法を教えて頂けないでしょうか? 恐れ入りますが、宜しくお願いします。

  • DOSコマンドで指定日数よりも過去のフォルダを削除

    サーバ上のログファイルを日毎に次のようなフォルダにまとめて管理しています。 (ログフォルダは翌朝のDOSバッチジョブでBACKUP_(処理日付)のフォルダを作成してその下に*.*指定で全てのファイル(除 フォルダ)を移動して作成します。) 例. BACKUP_20041130 BACKUP_20041129 BACKUP_20041128    ・    ・    ・ BACKUP_20040311 BACKUP_20040310 このフォルダを処理日付から数えて90日より古いものを削除するDOSコマンドバッチファイル(日次実行)を作成したいです。 プログラムを作成すればこれを実現するのは可能なんですが、なんとかDOSコマンドだけでこの仕組を作りこめないものでしょうか? ご存知の方がいらっしゃったら教えて下さい。

  • DOSプロンプトのコマンドが動作しません。教えてください。

    DOSプロンプトのコマンドが動作しません。教えてください。 o.5975247の続きの者ですが、DOSプロンプトからあらゆる種類のコマンドが使えない状態になっています(自分自身で知っている限りのDOSコマンドを打ちこんでみた)。 DOSコマンドを入力した結果は、以下のような表示が出ます。 `コマンド名`は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。 何とか対応の仕方をアドバイス願います。

  • DOSコマンド(COPYコマンド)について

    DOS上でのCOPYコマンドについて確認します。 EXCELのファイルで、毎回ファイル名が変わるため、COPYコマンドで固定のファイル名にしようと思い、バッチ起動で、COPY \AAA\*.XLS \AAA\BBB.XLSで実行すると、コピー元と違うファイルサイズのBBB.XLSが作成されます。 中身を参照すると、文字化けしたものが 1レコードだけ作成されています。どうしてなのでしょうか? ※コピー元の*.XLSは、毎回 1ファイルのみです。

  • DOSのSTARTコマンドでEXEを呼び出したときのウィンドウ制御について

    お世話になります。 環境:WindowsVista 下記の様な構成のバッチファイルを作成し、実行したところ、 最終的に呼ばれているEXEのウィンドウが背面に隠れてしまいます。 <使用するファイル> バッチX バッチY 実行ファイルZ ( *.exe) <処理概要> 起動バッチを最新版に更新し、実行ファイルを起動する <処理の流れ> 1)バッチXをMouse-DblClickにて起動 2)バッチXにて、STARTコマンドでバッチYを呼び出す   →STARTコマンドを発行後にEXITコマンドを発行し、バッチX自身を終了 4)バッチYにて、STARTコマンドで実行ファイルZを呼び出す   →STARTコマンドを発行後にEXITコマンドを発行し、バッチY自身を終了 <問題> 上記(4)の時点で実行ファイルZが起動するのですが、  ・ウィンドウがアクティブにならない  ・Explorerなど他ウィンドウが有る時は、その背面として表示されてしまう。 という2点の問題があります。 <確認したこと> 単純に バッチ起動→実行ファイル呼び出し という、テスト用バッチを作って 実行したところ、上記のような問題はおこりませんでした。 推測するに、バッチを2段経由していることに拠ると考えています。 この辺りのウィンドウ制御についてご教授頂きたく、宜しくお願い致します。 佐藤

  • DOSのECHOコマンドで > を表示させたい

    DOSでバッチファイルを組んでいます そこで ECHOコマンドで > を表示させたいのですが 具体的には ECHO > と打っているんですがコマンドの構文が間違っていますと出ます おそらく実行結果をファイルにするときの > になってしまっているのだと思います ECHOで > を表示させる方法は無いでしょうか? 知っている方いればお願いします

専門家に質問してみよう