入力がたとえば の場合、N
IF 行は次のように評価されます。
If N=="y" goto yes
If N=="n" goto no
…
つまり、 を含む、 thenなどと比較N
しています。ユーザーが何らかの方法でorを入力しない限り、一致することはありません(つまり、4 つの文字のいずれかを二重引用符で囲みます)。"y"
"n"
"N"
"N"
"y"
そのため、 、、および"
の周りから削除するか、条件ステートメントに配置する必要があります。後者をお勧めします。これは、バッチ スクリプトで特別な意味を持つ文字の少なくとも一部をエスケープするためです (ユーザーがそれらを入力できた場合)。だから、これはあなたが得るべきものです:y
n
Y
N
%INPUT%
If "%INPUT%"=="y" goto yes
If "%INPUT%"=="n" goto no
If "%INPUT%"=="Y" goto yes
If "%INPUT%"=="N" goto no
ちなみに、次のようにステートメントに/I
スイッチを適用することで、条件の数を減らすことができます。IF
If /I "%INPUT%"=="y" goto yes
If /I "%INPUT%"=="n" goto no
この/I
スイッチにより、大文字と小文字が区別されない比較が行われるため、大文字と小文字が異なる文字列を個別にチェックする必要はありません。
もう 1 つの問題は、開発モードのコマンドが実行された後、他のコマンドを飛び越えないことです。そのため、ユーザーが Java を開発モードで実行することに同意すると、開発モードと非開発モード。したがって、スクリプトに次のようなものを追加する必要があるかもしれません。
...
:yes
java -jar lib/RSBot-4030.jar -dev
echo Starting RSbot in developer mode
goto cont
:no
java -jar lib/RSBot-4030.jar
echo Starting RSbot in regular mode
:cont
pause
最後に、誤った入力の処理の問題に対処するために、条件ステートメントの直後、ラベルgoto
の直前に別の (無条件の) コマンドを追加するだけで済みます。つまり、プロンプトが表示され、入力が行われるスクリプトの先頭に戻ることができます。または、ジャンプの前に別の ECHO コマンドを追加して、入力が正しくないことを次のように説明することもできます。yes
goto Ask
@echo off
:Ask
echo Would you like to use developer mode?(Y/N)
set INPUT=
set /P INPUT=Type input: %=%
If /I "%INPUT%"=="y" goto yes
If /I "%INPUT%"=="n" goto no
echo Incorrect input & goto Ask
:yes
...
注: ここで言及されている問題のいくつかは、@xmjx の回答でも取り上げられています。