Другие языки программирования и технологии

Помогите с bat файлом!

Вот задание:
Разработать пакетный файл для проверки дисков (каталогов) на вирусы. Диск выбирается из меню. Имя антивирусной программы - в командной строке (avp.exe).

Вот реализация:
@echo off
cls
IF -%1==-GOTO NoDir1
REM Вывод меню на экран
ECHO A - Диск C
ECHO B - Диск D
CHOISE /C:AB
CLS
KEM Определение сделанного вывода
IF ERRORLEVEL 2 GOTO DirToD
IF ERRORLEVEL 1 GOTO DirToC
ECHO Выбор не сделан
GOTO End

:DirToC
IF -%1==-GOTO NoDir2
Rem Вывод меня на экран
ECHO 1 - Avast
ECHO 2 - Drweb
CHOISE /C:12
CLS
KEM Определение сделанного выбора
IF ERRORLEVEL 2 GOTO DirToDrweb1
IF ERRORLEVEL 1 GOTO DirToAvast1
ECHO Выбор не сделан
GOTO End

:DirToD
IF -%1==-GOTO NoDir3
Rem Вывод меня на экран
ECHO 1 - Avast
ECHO 2 - Drweb
CHOISE /C:12
CLS
KEM Определение сделанного выбора
IF ERRORLEVEL 2 GOTO DirToDrweb2
IF ERRORLEVEL 1 GOTO DirToAvast2
ECHO Выбор не сделан
GOTO End

:DirToAvast1
"C:\ Program Files\Avast\avast.exe" a -r "%1" C:\
goto end

:DirToAvast2
"C:\ Program Files\Avast\avast.exe" a -r "%1" D:\

:DirToDrweb1
"C:\ Program Files\Drweb\drweb.exe" a -r "%1" C:\
goto end

:DirToDrweb2
"C:\ Program Files\Drweb\drweb.exe" a -r "%1" D:\
goto end

:NoDir1
ECHO He указан диск
GOTO End

:NoDir2
ECHO He указан антивирь для диска С
GOTO End

:NoDir3
ECHO He указан антивирь для диска D
PAUSE
:End

ВОПРОС: Что не правильно и как переделать. Пожалуйста, аргументировано. Файл делал по аналогии, еще нормально не разобрался, как что писать. Помогите, плз.
и подпрограммой пользоваться опыта нет...
call :ask Disk_C Disk_D C D
if %answer%-==- call :no_answer "No disk"
set %disk=answer%
set answer=
call :ask Avast Dr.Web Avast\avast Drweb\drweb
if %answer%-==- call :no_answer "No AV"
set av=%answer%
"%programFiles/%av%" a -r %disk%:\
exit

:no_answer
ECHO %1
pause
exit

:ask
ECHO A - %1
ECHO B - %2
CHOISE /C:AB
IF ERRORLEVEL 2 set answer=%4
IF ERRORLEVEL 1 set answer=%3
exit /b
ЭХ
Эдуард Харитонов
61 027
Лучший ответ
Офтальмология Туркестан Юко Спасибо большое! Попытаюсь разобраться.
Моменты. Не choise а choice и более того такой команды нет в XP, Vista... но да есть в Windows 95 и Windows 10. н-р. Так что ИМХО лучше использовать set /p в данном случае

@echo off
cls
IF "%1"=="" (
:disk
set /p disk="Имя диска:"
) else set disk=%1

set disk=%disk:~0,1%:\
if not exist "%disk%" goto disk

:av
set /p av="Антивирус (1 - Avast; 2 - DrWeb):"
if %av%==1 "%Program Files%\Avast\avast.exe" a -r "%disk%"&exit
if %av%==2 "%Program Files%\Drweb\drweb.exe" a -r "%disk%"&exit
goto av

Логичнее не спрашивать A - диск C:, B - Диск D, а просто спросить имя диска у пользователя.

Если диск через командную строку не задан или такого нет в систем - он будет спрошен.
В принципе так-же можно сделать с антивирусом.

За правильность ключей у антивирусов - отвечаете сами =)

P.S: ИМХО логика немного не так построена. Надо бы определять сначала есть ли AVAST или DrWeb, а затем предлагать выбор. Диски на существование тоже хорошо-бы проверять.
Но по умолчанию - примерно Ваш аналог, но короче + фичи.

Строго говоря не рекомендуется на одной системе иметь 2 и более _активных_ антивируса.
Офтальмология Туркестан Юко Спасибо большое. Не могли бы вы подсказать ресурс, где можно больше узнать о том, как писать bat-ники. А то, походу, мой учебник прям сильно устарел и половину из того, что вы написали не могу найти.