この記事では、バッチでy/nの分岐を作成する方法を模索していきます。
お急ぎの方で「結論だけでいい!!」って方は →→→ ジャンプ!
IF文を使って分岐をする
まずは、簡単にIF文を使用して、y/nの分岐を作成しました。
set /p yn_check="Which do you like (y/n)"
IF %yn_check%==y (
echo you selected " y "
) ELSE (
echo you selected " n "
)
yとnを大文字でも判定できるようにする
上記の判定法では、yとnが(大文字で)YやNと入力された際に正確に判定できません。
なので、下記コマンドを使用しました。
%yn_check:Y=Y%
上記コマンドの詳しい解説については下の@q1701様の記事が大変分かりやすかったので参考にしてください。→参考記事
これを先ほどのIFの文に落とし込むと・・
set /p yn_check="Which do you like (y/n)"
IF %yn_check:Y=Y%==Y (
echo you selected " y "
) ELSE (
echo you selected " n "
)
これで、基本的なy/nの分岐ができるようになりました。
y(Y)またはn(N)以外の文字では再入力を促す
ここまでの構文では、y(Y)以外の文を入力した際はnを入力したものを同じ結果になります。
しかし、このままでは、誤ったキーを押しただけでNと同じ結果が出てしまいます・・
そこで下記動きになるように分岐を作り直します。
yまたはY → "you selected y"と表示
nまたはN → "you selected n"と表示
それ以外 → 再入力
ここで、使用するのはGOTO構文ですね
作り直すとこんな感じです。
:RESTART
set /p yn_check="Which do you like (y/n)"
IF %yn_check:Y=Y%==Y (
echo you selected " y "
) ELSE IF %yn_check:N=N%==N (
echo you selected " n "
) ELSE (
echo " %yn_check% " is unavailable
GOTO RESTART
)
さらに、echo offと再入力の際に画面のクリアもプラスで加えちゃいましょう。
echo off
:RESTART
set /p yn_check="Which do you like (y/n) : "
IF %yn_check:Y=Y%==Y (
echo you selected " y "
) ELSE IF %yn_check:N=N%==N (
echo you selected " n "
) ELSE (
cls
echo " %yn_check% " is unavailable
GOTO RESTART
)
まとめ
途中で作成した下記の構文を様々なバッチファイルに組み込んでいくことで、y/nの分岐を有効に使えそうです。
:RESTART
set /p yn_check="Which do you like (y/n)"
IF %yn_check:Y=Y%==Y (
--- y(Y)を入力した際の処理
) ELSE IF %yn_check:N=N%==N (
--- n(N)を入力した際の処理
) ELSE (
echo "もう一度入力してください"
GOTO RESTART
)
今回は、初めてのQIITA投稿です。
記事の内容についても、コマンドの書き方についてもこれはもっとこう書いたほうが良いとかコメントあればご助言ください。
今後ともよろしくお願いいたします。