1

再会,

我对批处理文件还是有点陌生​​,并且来自 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% 以查看选择了什么,

它显示输入是 AB 或 C 取决于我选择的,

但是我希望 else 命令仅在选择了 1-4 或 AC 以外的任何其他选项时才启动,

如果更好地尝试:

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

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

有没有比较字母的方法?如:

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

1 回答 1

1

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

为什么执行进入 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
)
于 2013-10-28T16:08:01.190 回答