【Win】DOS バッチファイルの処理を番号選択…

このQ&Aのポイント
  • 持ち歩き用PCのWindowsログオン時に起動する処理をコントロールするためのバッチファイルを作成しています。
  • 10キーボードから入力した番号選択が想定通りに処理されず、エラーが発生しています。
  • コーディング上のミスが原因で正しい処理に飛べていない可能性があります。カテゴリーの変更やアドバイスを求めています。
回答を見る
  • ベストアンサー

【Win】DOS バッチファイルの処理を番号選択…

バッチファイルの内容 ------------------------------------------------------------------------------------ @echo off cls rem メニュー選択画面 :menu echo **************************** echo * キー入力でメニュー選択 * echo **************************** echo. echo  1.自宅環境(有線LAN・ADSL) echo  2.モバイル環境(Bluetooth DUN設定) echo  3.モバイル環境(Bluetooth PAN設定) echo. echo  99.終 了 echo. set /p choice="現在の環境を上記番号より選択して下さい:" rem 番号選択後の制御フロー if "%choice%"=="1" (goto homelan) if "%choice%"=="2" (goto btdnu) if "%choice%"=="3" (goto btpan) if "%choice%"=="99" (goto end) goto error :homelan rem 自宅環境(有線LAN・ADSL) 選択時の制御 echo 1.自宅環境(有線LAN・ADSL) rem モバイル環境(Bluetooth DUN設定) :btdnu echo 2.モバイル環境(Bluetooth DUN設定) rem モバイル環境(Bluetooth PAN設定) :btpan echo 3.モバイル環境(Bluetooth PAN設定) rem エラー時の制御 :error cls echo 入力エラー!:選択肢以外の番号が入力されました。正しい番号を再度入力して下さい。 goto menu rem 終了時の制御 :end exit ------------------------------------------------------------------------------------ 上記のコードは、持ち歩き用に使っているPCでWindowsのログオン時に起動させる処理をコントロールするためにネット上の情報を元に勉強がてら自分で書いています。(あと、ちなみにDOS関連の知識はほとんどありません。) batファイルで保存し、DOSプロンプトでテストをしていました。 IMEはオフにし、番号選択の「1」「2」「3」を10キーボードから入力すると、errorラベルに飛んでしまい、こちらが想定している正しい処理に飛びません。(ちなみに、「99」と入力したときは正しく処理されいています。) どこにコーティング上のミスがあるのか判別がつかないため、ミスを犯しているポイントを教えていただけると幸いです。 また、カテゴリーを変更したほうがいいなどのアドバイスがありましたら、誘導していただけると幸いです。 どうかよろしくお願いしますm(__)m

質問者が選んだベストアンサー

  • ベストアンサー
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

バッチ処理は正常に動作しています 分岐処理後に動作を停止する命令が無いだけです 例えば 条件分岐でA,B,ENDの分岐とします バッチ処理の流れが main 入力 条件分岐 Aの処理 Bの処理 エラー処理 END処理 とした場合、Aの処理の最後に処理を停止する命令がなければBの処理⇒エラー処理と進んでしまいます 試しに、END処理以外の条件処理の後にgoto menuを付け加えて試して見てください :homelan rem 自宅環境(有線LAN・ADSL) 選択時の制御 echo 1.自宅環境(有線LAN・ADSL) goto menu rem モバイル環境(Bluetooth DUN設定) :btdnu echo 2.モバイル環境(Bluetooth DUN設定) goto menu rem モバイル環境(Bluetooth PAN設定) :btpan echo 3.モバイル環境(Bluetooth PAN設定) goto menu こんな感じで

yoccyann_iwate
質問者

お礼

回答ありがとうございます。 回答のように処理を停止する内容(テスト中のため、一時的にmenuへ飛ぶようにしました。)を追記したところ、errorラベルに飛ぶことなく動作するようになりました。 私の想定だと処理分岐後、echo 「選択したメニュー名の表示」で処理が停止するものだと思っていましたが、そうでもなかったのですね… ^^; 勉強になりました。 これでテストを継続できます。即答ありがとうございました。

関連するQ&A

  • 【バッチファイル】コマンドの説明

    @echo off cls :start ECHO. echo 以下から該当PCの作業形態を選択して下さい。 echo 1:データ移行有り echo 2:データ移行無し set choice= set /p choice=上記の番号を入力して下さい(1,2)> if not '%choice%'=='' set choice=%choice:~0,1% if '%choice%'=='1' goto ikou_ari if '%choice%'=='2' goto ikou_nashi ECHO "%choice%" is not valid please try again ECHO. goto start お世話になっております。 今回は、上記の「set choice=」以下の部分が どういった処理をしているのかをお聞きしたくて投稿いたしました。 特に、「set」の使い方と言いますか、 「set」の役割(set以下の処理)がどういうものなのかを お教えいただきたいと思っております。 よろしくお願いいたします。

  • DOSバッチでのファイル出力

    別ファイルで定義した変数内の文字列をファイル 出力したいと思っています。 REM 環境変数の設定 ※別ファイル内変数の読み込み CALL ../../ENV.BAT ・ ・ :SQLERROR echo %ERROR% >> aaa.log ---------------------------- 作成された「aaa.log」を見ると、「ECHO は <ON> です。」のような メッセージが表示され変数「%ERROR%」内の文字列がありません。 変数「%ERROR%」を固定文字列にすると出力されます。 変数内文字列の出力はどうすれば良いですか?。アドバイス お願いします。

  • バッチファイル set /p による条件分岐について質問

    vistaを使っています。 set /p でキー入力を受け付け処理を分岐させるファイルを作っているのですが・・・ 例外の条件を定義する方法がわかりません。 詳細は下をご覧になってください。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @echo off rem ##################################### rem 分岐プログラムサンプルです! rem ##################################### :start cls echo ■■■分岐プログラムサンプル■■■ echo 【1】test1へ! echo 【2】test2へ! echo 【3】test3へ! echo 【4】メニューを終了します! echo ■■■■■■■■■■■■■■■■■ set /p num="実行したいメニューの数字キーを入力してください⇒" if "%num%"=="1" goto A if "%num%"=="2" goto B if "%num%"=="3" goto C if "%num%"=="4" goto end . . . <省略> ↑のように入力された数字によって、処理が変わるようになっているのですが、ここで"上記以外の条件"を定義するにはどのように記述すればよいのかお教えいただけませんでしょうか。

  • バッチファイル goto前の表示のクリア

    バッチファイルでgoto前の表示のクリアしたいです。 どうしたらよいでしょうか? ●記述: :Select echo 選択_______ echo 1 --- 1です echo 2 --- 2です echo 0 --- 終了 set /P Res="入力 >>>>>>> " if "%Res%"=="1" goto 1 if "%Res%"=="2" goto 2 if "%Res%"=="0" goto END goto Select :1 echo. echo 111 echo. goto SELECT :2 echo. echo 222 goto SELECT ●結果: 選択_______ 1 --- 1です 2 --- 2です 0 --- 終了 入力 >>>>>>>1 111 選択_______ 1 --- 1です 2 --- 2です 0 --- 終了 入力 >>>>>>> ●入力後表示したい文字列(以下だけ): 選択_______ 1 --- 1です 2 --- 2です 0 --- 終了 入力 >>>>>>>

  • CMDの「Explorer」

    管理しているサーバが沢山あり以下のようなBATを作りましたが 「3」がうまく起動してくれません。 Explorerではネットワーク(絶対パス)は開くことが出来ないでしょうか?(ネットワークマウントは極力避けたい) どなたかご教授下さい。 @echo off :start echo. echo 1. TEMP開く echo 2. Windows開く echo 3. サーバ1開く echo 4. 終了します。 echo. set choice= set /p choice=選択してください: if not '%choice%'=='' set choice=%choice:~0,1% if '%choice%'=='1' goto C:\temp if '%choice%'=='2' goto C:\windows if '%choice%'=='3' goto server1 if '%choice%'=='4' goto EOF goto start :temp explorer c:\temp :windows Explorer c:\windows :server1 Explorer \\server1\work$

  • バッチファイルのIF分岐にて任意の文字を入力しておきたい

    バッチファイルのIF分岐にて任意の文字を入力しておきたいです。 下記のようなバッチファイルを作成し、「1」を入力すると「:AAA」のラベル に飛びメッセージが表示されるようにしています。 最初から「1」が自動で入力されているような状況にすることはできますでしょうか? 「set NUM=1」にしておけば、Enterを押すだけで「1」が入力されている のはわかったのですが、DOS上に「1」が表示されていません。 入力待ちの際に「1」が入力されている状況を作りたいと思っています。 Windows XP 32bitで動作させたいです。 お手数ですが知識をお借りしたいと思います。 もしくは「ここを見ろ」というのをご教授ください。 -------------------------------------------------- @echo off :LOOP set NUM= cls echo. echo "1. AAA" echo "2. BBB" echo "0. 終了" echo. echo. set /p NUM="番号を入力してください >" if %NUM% == 1 goto :AAA if %NUM% == 2 goto :BBB if %NUM% == 0 goto :owari echo 番号がありません echo. pause goto :LOOP :AAA echo "AAAです" echo. pause goto :LOOP :BBB echo "BBBです" echo. pause goto :LOOP :owari echo 終了します echo. pause goto :eof --------------------------------------------------

  • バッチファイルでのif文分岐

    ドラッグ・アンド・ドロップ(以下、D&D)によるバッチファイルを作成する際にダブルクリックでバッチファイルを開こうとする行為のフェールセーフを考えています。 現状では、以下のバッチファイルにファイルやフォルダをD&Dするとif文の分岐の箇所で終了してしまいます。 有識の方の教授をお願いします。 /* ↓↓ 以下コードです ↓↓*/ @echo off if "%1"=="" goto error rem D&Dされたパスを表示 echo %1 echo 終了しました。 goto end :error echo このファイルはダブルクリック形式ではありません。 echo ファイルやフォルダをD^&Dして下さい。 pause exit :end exit /* ↑↑ ここまで ↑↑ */ 開発環境 OS:WindowsXP 以上、よろしくお願いします。

  • バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが

    バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが開けない (1)と(2)のバッチファイルを作りました。それぞれ単体で実行すると、エラーは出ません。 (1)と(2)を一緒にした(3)というバッチファイルで実行すると、FINDSTRのところで、 「ファイルを開くことができません」というエラーが出て、途中でとまってしまいます。 エラーを出さずに実行する方法は何かないでしょうか? (A.batは、CドライブにあるWord.exeを実行するだけのバッチファイルです。) どうぞよろしくお願いします。 【(3)の中身】 call A.bat >kekka.txt   ←この1行だけが(1)のバッチファイルの中身です GOTO kensaku GOTO :EOF ::文字列検索 :kensaku SET keyword=作成しました。   ←この行から下が(2)のバッチファイルの中身です FINDSTR %keyword% kensaku.txt > NUL GOTO kekka%ERRORLEVEL% GOTO :EOF :kekka0 REM 文字列あり ECHO %keyword%がありました PAUSE > nul GOTO :EOF :kekka1 REM 文字列なし ECHO %keyword%はありませんでした。 PAUSE > nul GOTO :EOF

  • DOSのバッチ作成について‐FORのネストはできるんでしょうか?

    以下のようなバッチプログラムを作っています。 echo %date% %time% 開始しました。 rem レポートに関する環境変数 set rep01=01_A表 set rep02=02_B表 set rep03=03_C表 set rep04=04_D表 set rep05=05_E表 for %%d in (dora emon) do ( rem ディレクトリに関する環境変数 set OUT_PATH=d:\%%d\o_files set DOWN_PATH=d:\%%d\dl_files set PUB_PATH=d:\%%d\p_files set BAK_PATH=d:\%%d\b_files set LOG_PATH=d:\%%d\batch_log for %%z in (0001 0002 0003 0004 0005) do ( for %%r in (%rep01% %rep02% %rep03% %rep04% %rep05%) do ( if exist OUT_PATH\%%z\*.htm *.xls GOTO RESULT_01 else GOTO RESULT_02 :RESULT_01 echo ファイルが存在します。 :RESULT_02 echo %date% %time% %%z ファイルがありません。))) ここまでで、コマンドの構造が誤っています。 とエラーがでます。 FORのネストができないのかなって思ったりするのですが、初プログラムに挑戦中で、わかりません。 質問の仕方すらなっていないと承知していますが、 どうか、よろしくお願いします。

  • DOSのIF文でつまづいています

    DOSのプログラムでつまづいています。 test.batの中身 ************************************************ if %1==start goto start else if %1==stop goto stop else goto error :start rem スタート処理 echo start%1 > test.txt :stop rem ストップ処理 echo stop%1 > test.txt :error rem エラー処理 echo error%1 > test.txt exit ************************************************* うまく処理できる方法を教えてください。