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

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

Ответить
Настройки темы
CMD/BAT - [решено] Поиск слова в последней строке

Пользователь


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

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


Изменения
Автор: support23
Дата: 27-06-2012
Описание: изменение
Добрый день!
Есть задача:
В лог файле, в последней строке нужно найти слово, например Error (искать по всей строке), если слово найдено делать действие 1 (завершать процесс), если нет, делать действие 2
лог периодически дописывается новыми строками.
вот что получилось -

Код: Выделить весь код
SetLocal EnableDelayedExpansion

Set LogDir=C:\Progra~1\test\lab\log
Set LogExt=log
Set NOfLastStrings=1

Set TAlert=false
For /F "tokens=*" %%F In ('Dir "%LogDir%\checkmail.%LogExt%" /B /A-D') Do (
Set LogFile=%LogDir%\%%F
Call :Check
)

If %TAlert%==true (

)
Exit

:Check

Set s=0
For /F %%A In (%LogFile%) Do (Set /A s+=1)


Set /A s-=NOfLastStrings
Set Alert=true
For /F "tokens=* skip=%s%" %%A In (%LogFile%) Do (
Echo %%A|Find "Error">nul&&Set Alert=false
)


If %Alert%==true (
Echo %LogFile% - Warning 
Set TAlert=true
echo %date% %time%  >> C:\Progra~1\Script\log.txt
echo "Error not found"  >> C:\Progra~1\Script\log.txt
) Else (
Echo %LogFile% - OK 
taskkill /f /im process.exe
echo %date% %time%  >> C:\Progra~1\Script\log.txt
echo "Process Shutdown"  >> "C:\Progra~1\Script\log.txt

)

Exit /B
Возникла проблема, если в логе есть пробелы, или в строке используются символы < > (например есть строка "17.08.2011 9:18:03, Получено от: <support@mail.ru>" )
то bat-ник отрабатывает неправильно, как можно исправить ? или какие еще есть варианты решения данного вопроса?
Спасибо!

Отправлено: 10:15, 27-06-2012

 

Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo off
cls

Set LogFile=E:\DDDDD\eee.log
FOR /F "usebackq delims=" %%s IN ("%LogFile%") DO Set Last="%%s"

Set Test=%Last:Error=%

If %Last%==%Test% (
      Echo Нет
) Else (
      Echo Есть
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 27-06-2012 в 22:42.

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

Отправлено: 22:34, 27-06-2012 | #2



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

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


Пользователь


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

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


Спасибо! То что нужно!

Отправлено: 10:34, 28-06-2012 | #3


Пользователь


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

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


чтобы не создавать новую тему, напишу здесь:
как проверять наличие слова (например error) не только в последней строке, а в последних N строках ?

(реализация VBS, bat, autoit)

Отправлено: 15:17, 15-08-2012 | #4


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls

Set LogFile=E:\DDDD\bbb.log
Set N=6

SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

Set NN=0
Set i=0

For /F "usebackq delims=" %%s IN ("%LogFile%") Do (
   Set /A NN=!NN!+1
   Set Last=" %%s "
   Set Test=!Last: Error =!
   If Not !Last!==!Test! Set i=!NN!
)  

Set Mess=Нет
If %i% GTR 0 (
   Set /A i=%NN%-%i%+1
   If !i! LEQ %N% Set Mess=Есть
)
Echo %Mess%
Пустые строки в подсчетах не участвуют. Я подразумеваю, что слово-это последовательность символов, ограниченных с обеих сторон пробелами, за исключением случая, когда слово расположено в начале или конце строки, или когда оно единственное в строке. В примере анализируем наличие слова Error. Иначе придётся как-то анализировать знаки пунктуации. Если не принимать такое допущение, в этом случае необходимо вместо имеющейся строки написать
Set Test=!Last:Error=!
Но при этом найдём строку как со словом Error, так и со словом ErrorLevel, например.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 15-08-2012 в 20:10.

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

Отправлено: 16:54, 15-08-2012 | #5


Пользователь


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

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


Благодарю!
Цитата megaloman:
Но при этом найдём строку как со словом Error, так и со словом ErrorLevel, например. »
Ничего страшного, этот вариант меня устраивает!

Отправлено: 13:04, 16-08-2012 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] PHP, определение слова в строке foma24 Вебмастеру 3 30-05-2012 15:35
Поиск слова в двух файлах david141 Вебмастеру 0 24-04-2012 02:41
C/C++ - [решено] Поиск слова в тексте,подскажите функцию VokaMut Программирование и базы данных 2 10-01-2012 15:09
Поиск слова в txt затем поиск по маске "(383)" и вывод инфы rustoss AutoIt 10 29-09-2011 15:27
[решено] Поиск в строке ancoder AutoIt 4 11-03-2009 18:58




 
Переход