Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Корректное возвращение Errorlevel

Ответить
Настройки темы
CMD/BAT - [решено] Корректное возвращение Errorlevel

Аватара для hunk3r

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток.
Есть скрипт проверки событий по заданным аргументам:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
set r=%1
set u=%2
set p=%3
set x=%4
set y=%5
set z=%6

FOR /F "delims=" %%i IN ('%windir%\system32\wevtutil.exe qe /r:%r% /u:%u% /p:%p% %x% /rd:true /f:text /q:"*[%x%[Provider[@Name='%y%'] and (EventID=%z%)]]"^|find /c "%z%"') do set "cnt=%%~i"

echo !errorlevel!
echo %cnt%
Errorlevel всегда возвращается 0.
Как выводить errorlevel именно команды find, чтобы убедиться, что команда сработала верно. И как смоделировать ситуацию, когда он будет 1?

Отправлено: 14:12, 24-05-2015

 

Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата hunk3r:
Как выводить errorlevel именно команды find, чтобы убедиться, что команда сработала верно. »

Команда
Код: Выделить весь код
find /c "что-то"
в конвейере сработает верно всегда, поскольку её результатом всегда является число (ноль и больше). Соответственно, трудно представить ситуацию, когда "errorlevel" будет больше ноля, разве что в случае ошибки в синтаксисе самой команды.

Последний раз редактировалось Georgio, 24-05-2015 в 15:44.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:05, 24-05-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата hunk3r:
Как выводить errorlevel именно команды find, чтобы убедиться, что команда сработала верно. »
В приведённом Вами контексте сие будет затруднительно, поскольку Вы как раз разбираете вывод «find.exe» по «for /f».
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:23, 24-05-2015 | #3


Аватара для hunk3r

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Благодарю за ответы. Значит, в моем примере смысла выводить errorlevel нет, если я увижу число событий?

Отправлено: 15:25, 24-05-2015 | #4


Аватара для hunk3r

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


В дальнейшем - делать call с уже вписанными параметрами и получать на почту меседж о текущем состоянии по нужным эвентам нужных серверов.

Отправлено: 23:43, 24-05-2015 | #5


Аватара для hunk3r

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Ребят, а как включить в конструкцию проверку
if %errorlevel% neq 0 goto B
:B echo "уровень ошибки ..."
else goto A
:A find ...

Отправлено: 10:24, 25-05-2015 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


  1. «%errorlevel%» от чего?
  2. «else goto A» и следом сразу «:A …» не имеет смысла.

Отправлено: 11:34, 25-05-2015 | #7


Аватара для hunk3r

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


errorlevel wevtutil'a... Как альтернативу - вижу два запроса wevtutil.exe с параметрами и вывод errlvl после первого. Эстетика конструкции пострадает, но что делать?)

Отправлено: 11:57, 25-05-2015 | #8


Аватара для hunk3r

Новый участник


Сообщения: 14
Благодарности: 0

Профиль | Отправить PM | Цитировать


Сделал. Конечный скрипт вызываемого файла:
Код: Выделить весь код
@echo off
setlocal enabledelayedexpansion
set r=%1
set u=%2
set p=%3
set x=%4
set y=%5
set z=%6
%windir%\system32\wevtutil.exe qe /r:%r% /u:%u% /p:%p% %x% /rd:true /f:text /q:"*[%x%[Provider[@Name='%y%'] and (EventID=%z%) and TimeCreated[timediff(@SystemTime) <= 86400000]]]">nul

if %errorlevel% neq 0 set result=-%errorlevel%
if %errorlevel% equ 0 set result=0

FOR /F "delims=" %%i IN ('%windir%\system32\wevtutil.exe qe /r:%r% /u:%u% /p:%p% %x% /rd:true /f:text /q:"*[%x%[Provider[@Name='%y%'] and (EventID=%z%) and TimeCreated[timediff(@SystemTime) <= 86400000]]]"^|find /c "%z%"') do set "cnt=%%~i"

echo %cnt%
echo %result%
Основа:
Код: Выделить весь код
@call %~dp0\1.bat server user password System ProviderName EventID

Отправлено: 13:04, 25-05-2015 | #9


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата:
Код: Выделить весь код
if %errorlevel% neq 0 set result=-%errorlevel%
if %errorlevel% equ 0 set result=0
Код: Выделить весь код
set /a result = -%errorlevel%
А зачем «-»?
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:49, 25-05-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Корректное возвращение Errorlevel

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Сортировка файлов по результату Errorlevel Herheinz Скриптовые языки администрирования Windows 12 22-03-2015 20:23
CMD/BAT - [решено] %errorlevel% внутри цикла всегда 0 apozlevich Скриптовые языки администрирования Windows 5 22-11-2013 18:55
errorlevel msp sov44 Хочу все знать 15 29-07-2013 12:17
CMD/BAT - [решено] вопрос по ping и команде if %errorlevel% zion87 Скриптовые языки администрирования Windows 1 29-12-2011 02:57
Cmd Параметр ERRORLEVEL storm2005 Microsoft Windows NT/2000/2003 1 30-03-2007 18:49




 
Переход