2015-09-14 1 views
-1

, поэтому я пытаюсь сделать командный файл, который будет действовать как программа запуска для моего портативного флеш-накопителя приложений, все работает отлично, пока я не попытаюсь добавить буквенно-цифровой ввод. То, что я в основном пытаюсь сделать, - пользовательские входы «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\4.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% 

ответ

0

Ваш существующий метод использует своего рода хак, чтобы заставить значение быть числовым, даже если оно не начиналось. Вместо того, чтобы возиться с этим, вы можете просто использовать текстовое сравнение:

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 для каждого элемента будут много работать для вас, особенно если вы хотите добавить или удалить элемент меню посередине. Но оптимизация этого с помощью более разумного подхода действительно не подходит для вашего вопроса.

+0

Простенький лучше, иногда он просто берет второй набор глаз. Благодарю. –