30

これは私が今まで持っているものです

@echo off
:Ask
echo Would you like to use developer mode?(Y/N)
set INPUT=
set /P INPUT=Type input: %=%
If %INPUT%=="y" goto yes 
If %INPUT%=="n" goto no
If %INPUT%=="Y" goto yes
If %INPUT%=="N" goto no
:yes
java -jar lib/RSBot-4030.jar -dev
echo Starting RSbot in developer mode
:no
java -jar lib/RSBot-4030.jar
echo Starting RSbot in regular mode
pause

いずれにせよ、ユーザーがyまたはnを入力すると、常に-devモードで実行されます。

答えが「はい」の場合は-devモードで実行し、答えが「いいえ」の場合は通常モードで実行するにはどうすればよいですか。また、入力がY、N、y、またはnでないかどうかを再度確認するにはどうすればよいですか?

4

9 に答える 9

40

入力がたとえば の場合、NIF 行は次のように評価されます。

If N=="y" goto yes 
If N=="n" goto no
…

つまり、 を含む、 thenなどと比較Nしています。ユーザーが何らかの方法でorを入力しない限り、一致することはありません(つまり、4 つの文字のいずれかを二重引用符で囲みます)。"y""n""N""N""y"

そのため、 、、および"の周りから削除するか、条件ステートメントに配置する必要があります。後者をお勧めします。これは、バッチ スクリプトで特別な意味を持つ文字の少なくとも一部をエスケープするためです (ユーザーがそれらを入力できた場合)。だから、これはあなたが得るべきものです:ynYN%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 コマンドを追加して、入力が正しくないことを次のように説明することもできます。yesgoto 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 の回答でも取り上げられています。

于 2012-08-18T19:55:59.210 に答える
6

私はただします:

set /p input= yes or no
if %input%==yes echo you clicked yes
if %input%==no echo you clicked no
pause
于 2013-12-23T23:27:05.153 に答える
0

これを実行しているプラ​​ットフォームはわかりませんが、拡張子が.batであるためWindowsを想定しています。

また、これを確認する方法はありませんが、バッチプロセッサがエラーのためにIf行をスキップしてから、-devを使用して実行しているようです。

コードとともに2つのジャンプターゲット(:yesおよび)を変更することで、これを試すことができます。:noその場合、-devのない行が実行されると、If行に誤りがあることがわかります。

もしそうなら、ファイル==で比較を行うための本当に正しい方法であるかどうかを確認してください.bat

また、bashがこのようなことを行う方法から判断すると、引用符が含まれている%foo=="y"場合にのみtrueと評価される可能性が%fooあります。だから多分"%foo"=="y"行く方法です。

于 2012-08-18T19:15:17.837 に答える
-2

%INPUT% の前後に引用符 (" ") を追加して、次のようにします。

If "%INPUT%" == "y" goto yes
If "%INPUT%" == "n" goto no
If "%INPUT%" == "Y" goto yes
If "%INPUT%" == "N" goto no
于 2015-05-22T00:54:27.237 に答える
-3

比較のためにこれを試してください

if "%INPUT%"=="y"...
于 2014-02-21T11:34:14.157 に答える