Пакетные файлы третье утверждение «если нет» не достигнуто - PullRequest
4 голосов
/ 25 ноября 2011

Привет сообщество stackoverflow,

Я пишу командный файл для автоматического обслуживания компьютера и включил несколько антивирусных приложений. По какой-то причине третье утверждение «если нет» никогда не достигается.

:AV
REM MSE
if not '%MSE%'=='' (
Echo Scanning for viruses using Microsoft Security Essentials.
Echo.
%MSE% -Scan -ScanType 1
Echo.
GOTO Defrag
)

REM AVG
if not '%AVG%'=='' (
Echo Scanning for viruses using AVG.
Echo.
%AVG% /COMP /QT /TRASH
Echo.
GOTO Defrag
)

REM NOD32
if not '%NOD32%'==''(
Echo Scanning for viruses using NOD32.
Echo.
if '%NOD32%'=='' GOTO NOD32NotFound
%NOD32% /aind /auto /log-file="%userprofile%\Desktop\Scan_Results.txt"
Echo.
GOTO Defrag
)

REM If all else fails...
GOTO AVNotFound

В настоящее время существует три блока кодов, по одному для каждой антивирусной программы. Каждый блок кода выполняется только тогда, когда переменная% AVG%% MSE% или% NOD32% не пуста, то есть они указывают на допустимый файл. Я назначаю переменные, используя код:

if exist "%programfiles(x86)%\AVG\AVG2012\avgscana.exe" set AVG="%programfiles(x86)%\AVG\AVG2012\avgscana.exe"

Все три блока кода работают отлично, с кодированием все в порядке. Проблема в том, что каким бы ни был третий блок, он никогда не выполняется. Таким образом, в текущем примере блоки кода располагаются в порядке MSE, AVG и NOD32. Блок кода NOD32 не выполняется, потому что это третий блок. И наоборот, если бы я вырезал и вставил блоки в другом порядке с блоком кода AVG, являющимся третьим блоком, он не будет выполнен.

Есть идеи?

Есть предложения?

Отредактировано для уточнения.

Ответы [ 3 ]

4 голосов
/ 25 ноября 2011

Вам не хватает пробела в строке:

if not '%NOD32%'==''(

Попробуйте:

if not '%NOD32%'=='' (

Когда я попробовал скрипт, эта строка вызвала сбой. После смены строки все заработало.

2 голосов
/ 25 ноября 2011

Являются ли переменные %MSE%, %AVG% или %NOD32% пакетными файлами? Если да, вам нужно будет вызвать их, используя вместо этого «call» (например, call %AVG%)

Если вы вызываете пакетный файл из другого, первый из них завершится после выполнения второго, если только он не вызывается с помощью "call".

0 голосов
/ 25 ноября 2011

Есть ли в скобках переменные %AVG%, %NOD32% или %MSE%? Могут ли они быть на пути C:\Program Files (x86)\? Кронштейн преждевременно закроет ветку.

Поместите кавычки вокруг исполняемой части команд, например:

"%MSE%" -Scan -ScanType 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...