批处理文件else语句无法正常工作

时间:2013-10-28 15:58:33

标签: batch-file

美好的一天,

我对批处理文件仍然有点新,来自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
)

它进入子代码,当它返回时,它进入else循环,

我在else循环中添加了echo%input%以查看所选内容,

它显示输入为A B或C,具体取决于我选择的,

然而,如果选择除1-4或A-C以外的任何其他选项,我希望其他命令只能启动,

如果尝试更好:

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

但如果我这样做,那些字母呢?

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

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

1 个答案:

答案 0 :(得分:1)

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

BUT

为什么执行进入if的else部分。因为它就是它所说的。检查是is input empty ?,如果用户选择了某些内容,则输入不为空,因此if条件为false,而else执行。

如果你想保留if else的结构,最好这样做

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