• ベストアンサー
  • 困ってます

BATにおいてのYes,No処理について

  • 質問No.9664277
  • 閲覧数154
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数2

お礼率 79% (760/962)

環境】Windows 10 Enterprise 2016 LTSB,一太郎

【プログラムの概要および処理について】

1.「一太郎」を起動する際にキャッシュが原因で起動できない事象があるため、既存のキャッシュフォルダをリネームすることによって、キャッシュフォルダが作成されて、それで改善することもあるため、そのBATファイルを作成しています。

2.CドライブはWindowsエクスプローラーで非表示にしており、コマンドプロンプトからであればアクセスできますが、ユーザーはコマンド操作が苦手な人もいるため、BATを実行してもらうことを考えています。

3.すでにリネームされているキャシュフォルダがある場合は、そのフォルダは削除してからキャシュフォルダをリネームします。
 リネームされているキャシュフォルダがない場合は、キャシュフォルダをリネームします。   

5.「実行しますか?」でY,N,Q以外を押した場合は、Y,N,Qを入力してもらうメッセージを表示した後、メニューに戻します。

6.「実行しますか?」でYを押した場合、キャッシュフォルダのリネーム処理を行います。
 コマンドの実行した場合に、errorlevelを確認して0以外(失敗している)ときは、エラーメッセージを表示してメニューに戻します。
 コマンドの実行した場合に、errorlevelを確認して0(成功している)ときは、処理が行われたメッセージを表示してメニューに戻します。

7.「実行しますか?」でNを押した場合、処理をせずにメニューに戻します。

8.「実行しますか?」でQを押した場合、終了します。

9.ユーザーが表示されたメッセージを見落とすことがないようにtimeoutでウェイトを設定しています。
ーーーーー
@Echo Off
REM + -------------- + ---------------------------------+
REM + プログラム名 | Ichitaro_Stop_Repair.BAT |
REM + -------------- + ---------------------------------+
REM + 概要 | (1) 『一太郎』が起動できない場合、|
REM + | キャッシュフォルダのリネーム |
REM + | を行う。 |
REM + | (2) リネームしたキャシュフォルダ |
REM + | がある場合、リネームしたキャシュ |
REM + | フォルダを削除する。 | 
REM + -------------- + ---------------------------------+
SET C_DRIVE="C:"
SET FOLDER1="C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE"
SET FOLDER2="C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE_Old"

:MENU
Echo "『 一太郎 』を起動できない問題を修正するため、一太郎のキャシュフォルダをリネームします。"
timeout /t 2 > nul
Set /P ans="実行しますか(Y=YES /N=NO /Q=Quit)? >"

If "%ans%"==”Y” (
If Exist %C_DRIVE% (
If Exist %FOLDER2% (
If Exist %FOLDER1% (
rd /s /Q %FOLDER2%
if %errorlevel%=="0" (
Echo "リネームされている一太郎のキャシュフォルダを削除しました。"
timeout /t 2 > nul
rename %FOLDER1% %FOLDER2%
if %errorlevel%=="0" (
Echo "一太郎のキャシュフォルダをリネームしました。"
timeout /t 2 > nul
cls
goto MENU
) else (
Echo "一太郎のキャシュフォルダをリネームが失敗しました。"
timeout /t 2 > nul
cls
goto MENU
)
) Else (
Echo "【エラー】リネームされている一太郎のキャシュフォルダを削除が失敗しましたので終了しました。"
        timeout /t 2 > nul
cls
goto MENU
)
      ) Else (
Echo "【エラー】一太郎のキャシュフォルダがないので終了しました。"
       timeout /t 2 > nul
cls
goto MENU
)
) Else (
If Exist %FOLDER1% (
rename %FOLDER1% %FOLDER2%
if %errorlevel%=="0" (
Echo "一太郎のキャシュフォルダをリネームしました。"
timeout /t 2 > nul
cls
goto MENU
) else (
Echo "一太郎のキャシュフォルダをリネームが失敗しました。"
timeout /t 2 > nul
cls
goto MENU
)
)
) Else (
Echo "Cドライブがないので処理を終了しました。"
timeout /t 2 > nul
cls
goto MENU
)
) Else If "%ans%"==”N” (
cls
Echo "中止しましたのでメニューに戻ります。"
timeout /t 2 > nul
cls
goto MENU
) Else If "%ans%"=="Q" (
cls
Echo "終了しました。"
timeout /t 2 > nul
cls
Exit
) Else (
cls
Echo "(Y=YES /N=NO /Q=Quit)のいずれかを入力してください。"
timeout /t 2 > nul
cls
Echo "メニューに戻ります。"
timeout /t 2 > nul
cls
goto MENU
)
ーーーーー

【ご教示いただきたい点】
「実行しますか?」でY,N,Qおよびそれ以外のキーを押してもメッセージが表示されず、処理も行われず、終了してしまいます。
 原因がわからないため、ご教示をいただけますでしょうか。 

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

  • 回答No.2
  • ベストアンサー

ベストアンサー率 32% (631/1970)

そのほか

SET C_DRIVE=C:
SET FOLDER1=C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE
SET FOLDER2=C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE_Old
も引用符要らないのでは?

2個目の If Exist %FOLDER1% ( にELSEが無い。
その直下に If Exist %FOLDER2% ( のELSEを閉じる括弧が無い。

if %errorlevel%==0 (の引用符を削除(たぶんですが)

で、肝心の動作は見ていませんがメニューに戻るようになりました。ただ、最初にEnterだけやってansが空だとやはり終了しますね。
補足コメント
Engineer480907

お礼率 79% (760/962)

すみません。

C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCEとC:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE_Oldが存在しない場合のELSEが抜けていました。
後は、本番環境で、リネーム、削除がうまくいくか確認してみることにします。


@Echo Off
REM + -------------- + ---------------------------------+
REM + プログラム名 | Ichitaro_Stop_Repair.BAT |
REM + -------------- + ---------------------------------+
REM + 概要 | (1) 『一太郎』が起動できない場合、|
REM + | キャッシュフォルダのリネーム |
REM + | を行う。 |
REM + | (2) リネームしたキャシュフォルダ |
REM + | がある場合、リネームしたキャシュ |
REM + | フォルダを削除する。 |
REM + -------------- + ---------------------------------+
SET C_DRIVE=C:
SET FOLDER1=C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE
SET FOLDER2=C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE_Old

:MENU
Echo "『 一太郎 』を起動できない問題を修正するため、一太郎のキャシュフォルダをリネームします。"
timeout /t 2 > nul
Set /P ans="実行しますか(Y=YES /N=NO /Q=Quit)? >"

If %ans%==Y (
If Exist %C_DRIVE% (
If Exist %FOLDER2% (
If Exist %FOLDER1% (
rd /s /Q %FOLDER2%
if %errorlevel%==0 (
Echo "リネームされている一太郎のキャシュフォルダを削除しました。"
timeout /t 2 > nul
rename %FOLDER1% %FOLDER2%
if %errorlevel%==0 (
Echo "一太郎のキャシュフォルダをリネームしました。"
timeout /t 2 > nul
cls
goto MENU
) else (
Echo "【エラー】一太郎のキャシュフォルダをリネームが失敗しました。"
timeout /t 2 > nul
cls
goto MENU
)
) Else (
Echo "【エラー】リネームされている一太郎のキャシュフォルダを削除が失敗しましたので終了しました。"
        timeout /t 2 > nul
cls
goto MENU
)
      ) Else (
Echo "【エラー】一太郎のキャシュフォルダがないので終了しました。"
       timeout /t 2 > nul
cls
goto MENU
)
) Else (
If Exist %FOLDER1% (
rename %FOLDER1% %FOLDER2%
if %errorlevel%==0 (
Echo "一太郎のキャシュフォルダをリネームしました。"
timeout /t 2 > nul
cls
goto MENU
) else (
Echo "【エラー】一太郎のキャシュフォルダをリネームが失敗しました。"
timeout /t 2 > nul
cls
goto MENU
)
) Else (
Echo "【エラー】一太郎のキャシュフォルダがないので終了しました。"
       timeout /t 2 > nul
cls
goto MENU
)
)
) Else (
Echo "【エラー】Cドライブがないので処理を終了しました。"
timeout /t 2 > nul
cls
goto MENU
)
) Else If %ans%==N (
cls
Echo "中止しましたのでメニューに戻ります。"
timeout /t 2 > nul
cls
goto MENU
) Else If %ans%==Q (
cls
Echo "終了しました。"
timeout /t 2 > nul
cls
Exit
) Else (
cls
Echo "(Y=YES /N=NO /Q=Quit)のいずれかを入力してください。"
timeout /t 2 > nul
cls
Echo "メニューに戻ります。"
timeout /t 2 > nul
cls
goto MENU
)
投稿日時:2019/10/06 16:01
お礼コメント
Engineer480907

お礼率 79% (760/962)

ありがとうございます。

ご教示いただきました点を踏まえて、修正したところ、Nを入力、Qを入力、その他を入力した場合は機能するようになりました。Enterだけを入力した場合もその他になるので、メニューに戻ることを確認しました。SPACEキーを押した後、Enterキーを押すとそこは終了してしまいました。

C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCEとC:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE_Oldが存在している環境は、会社の環境でないとないので、試せてはいませんが、C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCEとC:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE_Oldが存在しない環境でYを入力したら、なぜか、メッセージを表示せずに終了してしまいました。

@Echo Off
REM + -------------- + ---------------------------------+
REM + プログラム名 | Ichitaro_Stop_Repair.BAT |
REM + -------------- + ---------------------------------+
REM + 概要 | (1) 『一太郎』が起動できない場合、|
REM + | キャッシュフォルダのリネーム |
REM + | を行う。 |
REM + | (2) リネームしたキャシュフォルダ |
REM + | がある場合、リネームしたキャシュ |
REM + | フォルダを削除する。 |
REM + -------------- + ---------------------------------+
SET C_DRIVE=C:
SET FOLDER1=C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE
SET FOLDER2=C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE_Old

:MENU
Echo "『 一太郎 』を起動できない問題を修正するため、一太郎のキャシュフォルダをリネームします。"
timeout /t 2 > nul
Set /P ans="実行しますか(Y=YES /N=NO /Q=Quit)? >"

If %ans%==Y (
If Exist %C_DRIVE% (
If Exist %FOLDER2% (
If Exist %FOLDER1% (
rd /s /Q %FOLDER2%
if %errorlevel%==0 (
Echo "リネームされている一太郎のキャシュフォルダを削除しました。"
timeout /t 2 > nul
rename %FOLDER1% %FOLDER2%
if %errorlevel%==0 (
Echo "一太郎のキャシュフォルダをリネームしました。"
timeout /t 2 > nul
cls
goto MENU
) else (
Echo "【エラー】一太郎のキャシュフォルダをリネームが失敗しました。"
timeout /t 2 > nul
cls
goto MENU
)
) Else (
Echo "【エラー】リネームされている一太郎のキャシュフォルダを削除が失敗しましたので終了しました。"
        timeout /t 2 > nul
cls
goto MENU
)
      ) Else (
Echo "【エラー】一太郎のキャシュフォルダがないので終了しました。"
       timeout /t 2 > nul
cls
goto MENU
)
) Else (
If Exist %FOLDER1% (
rename %FOLDER1% %FOLDER2%
if %errorlevel%==0 (
Echo "一太郎のキャシュフォルダをリネームしました。"
timeout /t 2 > nul
cls
goto MENU
) else (
Echo "【エラー】一太郎のキャシュフォルダをリネームが失敗しました。"
timeout /t 2 > nul
cls
goto MENU
)
)
)
) Else (
Echo "【エラー】Cドライブがないので処理を終了しました。"
timeout /t 2 > nul
cls
goto MENU
)
) Else If %ans%==N (
cls
Echo "中止しましたのでメニューに戻ります。"
timeout /t 2 > nul
cls
goto MENU
) Else If %ans%==Q (
cls
Echo "終了しました。"
timeout /t 2 > nul
cls
Exit
) Else (
cls
Echo "(Y=YES /N=NO /Q=Quit)のいずれかを入力してください。"
timeout /t 2 > nul
cls
Echo "メニューに戻ります。"
timeout /t 2 > nul
cls
goto MENU
)
投稿日時:2019/10/06 15:38

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 32% (631/1970)

If "%ans%"=="Y" (
の引用符は4ことも要らないと思います。そして、私の数え間違いかもしれませんがif(のネストが合ってないような気がします。引用符を消して最初のif以下を削除してechoとpauseで動作を確認したところ、いちおう最初のifは動くようになりました。
補足コメント
Engineer480907

お礼率 79% (760/962)

ありがとうございます。
初回のみEnterキーを押したときに終了してしまう問題を修正しました。
ただ、SPACEと+を入力したときに終了する問題とメッセージの””を取り除いて実行するのはできませんでした。””を取り除いてしまうとプログラムが終了してしまいました。

@Echo Off
REM + -------------- + ---------------------------------+
REM + プログラム名 | Ichitaro_Stop_Repair.BAT |
REM + -------------- + ---------------------------------+
REM + 概要 | (1) 『一太郎』が起動できない場合、|
REM + | キャッシュフォルダのリネーム |
REM + | を行う。 |
REM + | (2) リネームしたキャシュフォルダ |
REM + | がある場合、リネームしたキャシュ |
REM + | フォルダを削除する。 |
REM + -------------- + ---------------------------------+
SET C_DRIVE=C:
SET FOLDER1=C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE
SET FOLDER2=C:\Users\%Username%\AppData\Roaming\JustSystem\TAROCE_Old

:MENU
SET ans=""
Echo "『 一太郎 』を起動できない問題を修正するため、一太郎のキャシュフォルダをリネームします。"
timeout /t 2 > nul
Set /P ans="実行しますか(Y=YES /N=NO /Q=Quit)? >"

If %ans%==Y (
If Exist %C_DRIVE% (
If Exist %FOLDER2% (
If Exist %FOLDER1% (
rd /s /Q %FOLDER2%
if %errorlevel%==0 (
Echo "リネームされている一太郎のキャシュフォルダを削除しました。"
timeout /t 2 > nul
rename %FOLDER1% %FOLDER2%
if %errorlevel%==0 (
Echo "一太郎のキャシュフォルダをリネームしました。"
timeout /t 2 > nul
cls
goto MENU
) else (
Echo "【エラー】一太郎のキャシュフォルダをリネームが失敗しました。"
timeout /t 2 > nul
cls
goto MENU
)
) Else (
Echo "【エラー】リネームされている一太郎のキャシュフォルダを削除が失敗しましたので終了しました。"
        timeout /t 2 > nul
cls
goto MENU
)
      ) Else (
Echo "【エラー】一太郎のキャシュフォルダがないので終了しました。"
       timeout /t 2 > nul
cls
goto MENU
)
) Else (
If Exist %FOLDER1% (
rename %FOLDER1% %FOLDER2%
if %errorlevel%==0 (
Echo "一太郎のキャシュフォルダをリネームしました。"
timeout /t 2 > nul
cls
goto MENU
) else (
Echo "【エラー】一太郎のキャシュフォルダをリネームが失敗しました。"
timeout /t 2 > nul
cls
goto MENU
)
) Else (
Echo "【エラー】一太郎のキャシュフォルダがないので終了しました。"
       timeout /t 2 > nul
cls
goto MENU
)
)
) Else (
Echo "【エラー】Cドライブがないので処理を終了しました。"
timeout /t 2 > nul
cls
goto MENU
)
) Else If %ans%==N (
cls
Echo "中止しましたのでメニューに戻ります。"
timeout /t 2 > nul
cls
goto MENU
) Else If %ans%==Q (
cls
Echo "終了しました。"
timeout /t 2 > nul
cls
Exit
) Else (
cls
Echo "(Y=YES /N=NO /Q=Quit)のいずれかを入力してください。"
timeout /t 2 > nul
cls
Echo "メニューに戻ります。"
timeout /t 2 > nul
cls
goto MENU
)
投稿日時:2019/10/06 21:56
お礼コメント
Engineer480907

お礼率 79% (760/962)

ありがとうございます。

入力するのが文字列ということがあり、“”でくくってしまっていました。
投稿日時:2019/10/06 15:41
結果を報告する
    • 2019/10/16 23:39
    • コメントNo.2

    ほかにもYES,NOの処理をするBATを作る必要があったので、このBATをベースにして作成することができました。

    • 2019/10/07 21:04
    • コメントNo.1

    フォルダ名が間違っていたので、修正しました。 SET FOLDER1=C:\Users\%Username%\AppData\Roaming\JustSystem\TaroCE S ...続きを読む

AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ