接受字母数字输入的批处理菜单

Batch menu that accepts alphanumeric input

所以我正在尝试创建一个批处理文件,它就像我的便携式应用程序闪存驱动器的启动程序一样,一切正常,直到我尝试添加字母数字输入。我主要想做的是,用户输入“1”,打开应用程序 1,用户输入“1H”,它会打开所述应用程序的帮助屏幕,可能会列出该应用程序的主要功能。我主要使用 Windows 7。这是我现有代码的一部分。

:: Menu 12
:Antivirus
%T% ANTIVIRUS
CLS
%L%
ECHO ==================== ANTIVIRUS LAUNCHER ====================
%L%
%F%
%M%1) AVZ4                       10) Simple Machine Protect =
%M%2) ClamWin                                    11) Sophos =
%M%3) Emsisoft                          12) Spy BHO Remover =
%M%4) Kaspersky                                  13) Spybot =
%M%5) Keylogger Detector                14) Spy DLL Remover =
%M%6) McAfee                               15) Stream Armor =
%M%7) Norman                                16) Trend Micro =
%M%8) Norton                                      17) Vipre =
%M%9) Remove Fake Antivirus                   18) ViruClean =
%M%                19) Virus Total Scanner                  =
%F%
%L%
%M%20) RETURN TO PREVIOUS MENU                     21) QUIT =
%L%
SET /A XO=0
SET OX=
SET /P OX=Please Make A Selection:
SET /A XO=%XO%+%OX%
IF %XO%==1 (%S%Antivirus\avz4\avz.exe" && %G%)
IF %XO%==2 (%S%Antivirus\ClamWin\ClamWinPortable.exe" && %G%)
IF %XO%==3 (%S%Antivirus\EEK\Start Emergency Kit Scanner.exe" && %G%)
IF %XO%==4 (SET Menu=13 && %G%)
IF %XO%==5 (%S%Antivirus\Keylogger Detector\KL-Detector.exe" && %G%)
IF %XO%==6 (SET Menu=14 && %G%)
IF %XO%==7 (%S%Antivirus\Norman\Norman.exe" && %G%)
IF %XO%==8 (%S%Antivirus\Norton Security Scan\Engine.3.0.43\Nss.exe" && %G%)
IF %XO%==9 (%S%Antivirus\Remove Fake Antivirus\Remove Fake Antivirus.exe" && %G%)
IF %XO%==10 (%S%Antivirus\Simple Machine Protect\SMP.exe" && %G%)
IF %XO%==11 (%S%Antivirus\Sophos\sargui.exe" && %G%)
IF %XO%==12 (%S%Antivirus\Spy BHO Remover\SpyBHORemover.exe" && %G%)
IF %XO%==13 (%S%Antivirus\Spybot\SpyDLLRemover.exe" && %G%)
IF %XO%==14 (%S%Antivirus\Spy DLL Remover\SpybotPortable.exe" && %G%)
IF %XO%==15 (%S%Antivirus\Stream Armor\StreamArmor.exe" && %G%)
IF %XO%==16 (SET Menu=15 && %G%)
IF %XO%==17 (%S%Antivirus\VIPRERESCUE\VipreRescueScanner.exe" && %G%)
IF %XO%==18 (%S%Antivirus\ViruClean\ViruClean.exe" && %G%)
IF %XO%==19 (%S%Antivirus\Virus Total Scanner\VirusTotalScanner.exe" && %G%)
IF %XO%==20 (SET Menu=11 && %G%)
IF %XO%==21 (%E%)
%MER%

您现有的方法是使用一种 hack 来强制将值设为数字,即使它不是以数字开头。不用为此烦恼,您可以使用文本比较:

SET /P SEL=Please Make A Selection:
if "%SEL%"=="1" echo AVZ4 chosen
if "%SEL%"=="1H" echo AVZ4 HELP chosen
...

如果您不关心大小写,您可以添加 /I 开关:

if /I "%SEL%"=="1H" echo AVZ4 HELP chosen

考虑到菜单的大小,为每个项目添加单独的 IF 语句会给您带来很多工作,尤其是当您想要在中间添加或删除菜单项时。但是用更聪明的方法优化它确实超出了你的问题范围。