2013-10-28 159 views
1

好日子,批处理文件else语句不能正常工作

我还是有点新的批处理文件,并从C++来和java有些东西是不同势...

我有一个主一批这就要求一个子批处理,但是当它返回时,它会进入else循环,我不知道为什么?

在主批次

用户选择并选择:

set /p input=Enter: 

if %input%==1 goto check 
if %input%==2 goto check 
if %input%==3 goto check 
if %input%==4 goto delete 
if %input%==A call %cd%\subbatch.bat %var1% %var2%\ 
if %input%==B call %cd%\subbatch2.bat %var1% %var2% 
if %input%==C call %cd%\subbatch3.bat %var1% %var2% 
if {%input%}=={} (
    echo. 
    echo Please enter a valid option 
    echo. 
    pause >nul 
) else (
    echo %input% 
    echo. 
    echo Please enter a valid option 
    echo. 
    pause >nul 
) 

它转到subbatch,并且当其返回它进入在else循环,

我中添加的回声%输入%看到别人循环选择什么,

它表明输入是AB或C取决于我已经选择,

但是我希望其他COMAND只踢如果选择比1-4或A-C以外的任何其他选项,

会,如果是更好的尝试:

if %input% GTR 4 (echo enter valid option) 

,但如果我这样做,怎么样的信吗?

有没有办法比较字母?如:

if %input% GTR "C" (....) 

回答

1

有了这种菜单,更好的选择是使用choice命令,只允许所需的选项。

但是

为什么执行进入if的else部分。因为它是这样说的。该检查为is input empty ?,如果用户选择了某些内容,则输入不为空,因此if条件为false并执行其他操作。

如果你想保留的if else结构,更好地做这种方式

if "%input%=="a" (
    .... 
) else if "%input%"=="b" (
    .... 
) else if "%input%"=="1" (
    .... 
) else (
    rem AND HERE falls the bad options 
) 
+0

谢谢回答,这是有道理的!并感谢您的建议,会放弃它, – Zealotwraith