質問: 環境】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およびそれ以外のキーを押してもメッセージが表示されず、処理も行われず、終了してしまいます。 原因がわからないため、ご教示をいただけますでしょうか。
回答: If "%ans%"=="Y" ( の引用符は4ことも要らないと思います。そして、私の数え間違いかもしれませんがif(のネストが合ってないような気がします。引用符を消して最初のif以下を削除してechoとpauseで動作を確認したところ、いちおう最初のifは動くようになりました。