初めて自分の家と他人の家が違う、と意識した時

バッチファイルの内容
------------------------------------------------------------------------------------

@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

A 回答 (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

こんな感じで
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

回答のように処理を停止する内容(テスト中のため、一時的にmenuへ飛ぶようにしました。)を追記したところ、errorラベルに飛ぶことなく動作するようになりました。

私の想定だと処理分岐後、echo 「選択したメニュー名の表示」で処理が停止するものだと思っていましたが、そうでもなかったのですね… ^^; 勉強になりました。

これでテストを継続できます。即答ありがとうございました。

お礼日時:2011/11/19 07:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報