如果输入是N,则您的IF行如下评估:
If N=="y" goto yes
If N=="n" goto no
…
也就是说,你将N与“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开关使比较不区分大小写,因此您不需要针对不同的字符串单独检查。
另一个问题是,在执行开发模式命令之后,没有跳过另一个命令,因此,如果用户同意在开发模式下运行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命令,就是在yes标签之前,即goto Ask,返回到脚本的开头,显示提示。并且请求输入,或者您还可以在跳转之前添加另一个ECHO命令,解释输入不正确,如下所示:
@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的答案中解决了,我完全承认。