这就是我到目前为止所拥有的
@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
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,如果用户输入y或n,它总是以-dev模式运行.
如果答案是肯定的,如何让它在-dev模式下运行,如果答案为否,我如何使它在常规模式下运行.另外,如果输入不是Y,N,y或n,如何再次询问?
And*_*y M 39
例如,如果输入是,N您的IF线评估如下:
If N=="y" goto yes
If N=="n" goto no
…
Run Code Online (Sandbox Code Playgroud)
也就是说,你正在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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您可以通过将/I切换应用于IF语句来减少条件数,如下所示:
If /I "%INPUT%"=="y" goto yes
If /I "%INPUT%"=="n" goto no
Run Code Online (Sandbox Code Playgroud)
该/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
Run Code Online (Sandbox Code Playgroud)
最后,为了解决处理错误输入的问题,您可以简单地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
...
Run Code Online (Sandbox Code Playgroud)
注意:@xmjx在他们的回答中也解决了这里提到的一些问题,我完全承认这一点.
小智 6
我只是做 :
set /p input= yes or no
if %input%==yes echo you clicked yes
if %input%==no echo you clicked no
pause
Run Code Online (Sandbox Code Playgroud)