我有两个关于我正在处理的批处理脚本的问题。我意识到批处理脚本问题很常见,但没有找到我的确切问题的答案,所以我想我会试着问。有问题的区域是菜单上的用户输入部分。
有两个问题:1)输入的输入不是指定选项之一将导致脚本跳转到随机区域。并且2)使用外部程序的一些部分没有占用用户%输入%,即使我知道语法和标志使用通常是正确的(因为,我可以手动运行...因此由于某种原因输入是''捕获它们。)
第一期例子:
:MenuOne
echo Select one of the following options:
echo 1) x
echo 2) y
echo Q) Quit
set INPUT=
set /P INPUT=[1,2,Q]: %=%
If "%INPUT%"=="1" goto xoption
If "%INPUT%"=="2" goto yoption
If /I "%INPUT%"=="Q" goto Quit
:xoption
@REM Here goes a lot more submenus and/or options that actually run tools via cmd.
:yoption
@REM Again, menus and/or tools being invoked, in a listed menu, designed like above.
:Quit
echo Quitting...
exit
如果用户在选择提示符下键入“b”,我希望脚本能够发出错误并重复菜单。相反,它在其他菜单周围徘徊。我猜我需要一些ELSE语句?有没有人有一个我可以用来完成这个的例子?
第二期某些命令没有正确使用%input%并返回错误,好像它从未收到%input%。
set /P INPUT=[Testone Input]: %testone%
set /P INPUT=[Testtwo Input]: %testtwo%
commandtorun.exe -f %testone% -h %testtwo%
谢谢!
答案 0 :(得分:0)
在您编写的程序中,您的所有选择都将落到下一个。如果未输入相关选项,则会运行:xoption
和:yoption
。其中每一个都应该在执行后返回菜单:
:MenuOne
echo Select one of the following options:
echo 1) x
echo 2) y
echo Q) Quit
set INPUT=
set /P INPUT=[1,2,Q]: %=%
If "%INPUT%"=="1" goto xoption
If "%INPUT%"=="2" goto yoption
If /I "%INPUT%"=="Q" goto Quit
echo Invalid selection.
echo.
goto MenuOne
:xoption
@REM Here goes a lot more submenus and/or options that actually run tools via cmd.
goto MenuOne
:yoption
@REM Again, menus and/or tools being invoked, in a listed menu, designed like above.
goto MenuOne
确保有效选择的一种真正简单方法是使用choice
命令而不是set /P
。这将强制用户输入值:
choice -c 12Q
echo %errorlevel%
choice
命令将返回所选字符的索引(上例中为1,2或3)。奖励是它不区分大小写,因此您不必担心同时检查Q
和q
。
答案 1 :(得分:0)
最好使用choice
(http://ss64.com/nt/choice.html),因为它会一直存在,直到您设置正确的输入
CHOICE /C XYQ /M "Select of the following options [X,Y,Q]"
if errorlevel 1 goto :x
if errorlevel 2 goto :y
uf errorlevel 3 goto :q
然而,仍有可能使用IFs
set INPUT=
set /P INPUT=[1,2,Q]: %=%
If "%INPUT%"=="1" goto xoption
If "%INPUT%"=="2" goto yoption
If /I "%INPUT%"=="Q" goto Quit
rem -- will be executed only if the all the above are not true
goto :eof
对于第二个问题..你没有正确使用SET /P
(变量的名称应该在前面),或者你正在尝试一些我不理解的东西(使用输入变量的地方) :
set /P testone=[Testone Input]:
set /P testtwo=[Testtwo Input]:
commandtorun.exe -f %testone% -h %testtwo%