2013-05-15 154 views
3

我有两个关于正在处理的批处理脚本的问题。我意识到批处理脚本的问题很常见,但还没有找到答案我的确切问题,所以我想我会试着问。有问题的区域是菜单上的用户输入部分。批处理脚本输入问题

有两个问题:1)输入的输入不是指定的选项之一会导致脚本跳转到随机区域。并且2)使用外部程序的某些部分即使在我知道语法和标志使用通常是正确的时候也不会使用%input%(因为我可以手动运行它们......所以出于某种原因,输入不是'捕捉他们)。

第一个问题例如:

: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

最好使用choicehttp://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 

然而,它仍然可以与国际单项体育联合会

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% 
+0

注意:如果OP使用的是Windows XP,默认情况下“choice”不可用。 – michaelb958

+0

真棒答案 - 我不能相信我使用set/P错误。你是对的,我基本上是通过不使用两个不同的变量来覆盖旧的输入。现在工作,非常感谢!编辑:正如michaelb958说的那样,我试过了。哦,回到设置/ P现在工作得很好:)谢谢 – Interrupt

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)的索引。一个好处是它不区分大小写,所以你不必担心检查Qq

+0

谢谢!事实证明,选择不适用于我。但是你所建议的一切都工作。非常感激。 – Interrupt