Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Поиск слова в последней строке (http://forum.oszone.net/showthread.php?t=237386)

support23 27-06-2012 10:15 1941223

Поиск слова в последней строке
 
Добрый день!
Есть задача:
В лог файле, в последней строке нужно найти слово, например 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-ник отрабатывает неправильно, как можно исправить ? или какие еще есть варианты решения данного вопроса?
Спасибо!

megaloman 27-06-2012 22:34 1941701

Код:

@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 Есть
)


support23 28-06-2012 10:34 1941890

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

support23 15-08-2012 15:17 1970713

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

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

megaloman 15-08-2012 16:54 1970778

Код:

@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, например.

support23 16-08-2012 13:04 1971203

Благодарю!
Цитата:

Цитата megaloman
Но при этом найдём строку как со словом Error, так и со словом ErrorLevel, например. »

Ничего страшного, этот вариант меня устраивает!


Время: 02:05.

Время: 02:05.
© OSzone.net 2001-