如果输入是,比如说,N
你的 IF 行评估如下:
If N=="y" goto yes
If N=="n" goto no
…
也就是说,您正在N
与"y"
, then"n"
等进行比较,包括"N"
. 除非用户以某种方式决定输入"N"
或"y"
(即四个字符中的任何一个,但用双引号括起来),否则您永远不会得到匹配。
因此,您需要"
从 aroundy
中删除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
switch 应用于IF
语句来减少条件的数量,如下所示:
If /I "%INPUT%"=="y" goto yes
If /I "%INPUT%"=="n" goto no
该/I
开关使比较不区分大小写,因此您不需要单独检查不同大小写的字符串。
另一个问题是,在执行开发模式命令后,没有跳过另一个命令,因此,如果用户同意在开发模式下运行 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 在他们的回答中也解决了这里提到的一些问题,我完全承认这一点。