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