Batch file &引用;如果;如果输入的值为';别无选择

Batch file &引用;如果;如果输入的值为';别无选择,batch-file,if-statement,Batch File,If Statement,如果我使用If命令但输入一个非选项的值,它将转到随机部分,例如: set /p test if %test% == x goto home if %test% == y goto home2 :home echo hi pause :home2 echo how are you pause :pie echo want some pie? 如果我输入x,它将返回到home,但如果我输入c或w,它将返回pie或home2,我如何修复它?正如@LotPings所说: 如果前两个If不触发

如果我使用If命令但输入一个非选项的值,它将转到随机部分,例如:

set /p test

if %test% == x goto home

if %test% == y goto home2

:home
echo hi
pause

:home2
echo how are you
pause

:pie
echo want some pie?
如果我输入x,它将返回到home,但如果我输入c或w,它将返回pie或home2,我如何修复它?

正如@LotPings所说:


如果前两个If不触发程序流直接导致:home,那又怎样?同样在暂停之后,它将继续使用所有其他标签。set/p测试中缺少一个等号=最后一个带有c和w的断言是无意义的

第一个问题的解决方案:添加一个
goto
语句,重新向用户询问有效答案

第二个问题的解决方案:我不认为我需要解释太多


顺便说一下,下面是正确的代码:

:prompt

set /p test=Enter option:
if "%test%" == "x" goto home
if "%test%" == "y" goto home2

goto :prompt

:home
echo hi
pause

:home2
echo how are you
pause

:pie
echo want some pie?
pause

如果前两个If不触发程序流直接导致:home,那又怎样?暂停后,它还会继续与所有其他标签一起使用。
set/p test=
中缺少一个等号。最后一个用c和w的断言是无意义的。@1337Nico如果唯一可接受的输入是
x
y
,则使用该命令,这比使用
set/p
要好得多,因为用户可以自由输入任何内容,
x
y
“让批处理文件在出现语法错误时退出,或者做一些奇怪的事情>!可能的副本@ 1337尼科-如果你觉得我的答案是有用的,请考虑点击复选标记旁边的我的答案接受它。