【bat】バッチファイルで「y/n」回答による処理分岐を実現する方法

バッチファイルを使っていると、ユーザーに対して質問を投げかけ、その回答によって処理を分岐させたい場面があります。今回は、y/nで回答できる質問を実装し、回答に基づいて異なる処理を行う方法を紹介します。

基本的なバッチファイルの構造

まずは基本的な構造を見てみましょう。以下のコードは、ユーザーに「続行しますか?」と質問し、yとnの回答に応じて異なるメッセージを表示する例です。

@echo off
setlocal

:ask
set "input="
set /p "input=続行しますか? (y/n): "

if /i "%input%"=="y" (
    echo はいを選びました。
    rem はいを選んだ場合の処理
    goto end
) else if /i "%input%"=="n" (
    echo いいえを選びました。
    rem いいえを選んだ場合の処理
    goto end
) else (
    echo 無効な入力です。yまたはnを入力してください。
    goto ask
)

:end
echo スクリプトを終了します。
endlocal
pause

コードの詳細説明

このバッチファイルは、以下のステップで動作します。

  • setlocal: ローカル環境を設定します。これにより、バッチファイル内で設定した環境変数がバッチファイルの終了時に元に戻されます。
  • :askラベルから始まるループで、ユーザーに「続行しますか? (y/n): 」という質問をします。
  • set /p “input=続行しますか? (y/n): “: ユーザーに質問し、入力をinput変数に格納します。
  • if /i “%input%”==”y”: 入力がyの場合の処理を行います。
  • else if /i “%input%”==”n”: 入力がnの場合の処理を行います。
  • else: 入力が無効な場合、エラーメッセージを表示し、再度質問を行います(goto ask)。
  • 最後に、endlocalコマンドでローカル環境を終了し、pauseコマンドでスクリプトの終了を一時停止します。

応用例

この基本的な構造を基に、実際の処理を追加することで、様々な応用が可能です。例えば、ファイルのコピーや移動、プログラムの実行などの処理を行うことができます。

以下に、yと回答した場合にファイルをコピーし、nと回答した場合にスクリプトを終了する例を示します。

@echo off
setlocal

:ask
set "input="
set /p "input=ファイルをコピーしますか? (y/n): "

if /i "%input%"=="y" (
    echo ファイルをコピーしています...
    copy "source.txt" "destination.txt"
    goto end
) else if /i "%input%"=="n" (
    echo ファイルコピーをキャンセルしました。
    goto end
) else (
    echo 無効な入力です。yまたはnを入力してください。
    goto ask
)

:end
echo スクリプトを終了します。
endlocal
pause

まとめ

バッチファイルでユーザーに質問をし、その回答によって処理を分岐させる方法を紹介しました。基本的な構造を理解することで、様々な場面で応用が可能です。ぜひ、自分のプロジェクトに合わせて活用してみてください。