1 (изменено: Elencheg, 2011-03-21 08:49:50)

Тема: VBS: поиск нескольких фраз в текстовом файле

Добрый день, уважаемые коллеги!
Очень трубуется помощь в написании скрипта.
Путем долгих усилий написала скрипт по отслеживанию логов бэкапов-уведомление по почте если:
1 размер файла лога нулевой
2 отсутствует лог
3 есть ли слово error

Так вот вся проблема в том, что поик организован с помошью регулярных выражений только по слову ERROR, но мне то нужна еще проверка по словам: did not successfully complete/not/Insufficient disk space.
Сильно затрудняюсь с этим, ка кэто сделать - записать в массив слова или можно задавать несколько шаблонов регулярных выражений?
вот такой кусок скрипта:

Option Explicit
Dim oFSO, oFSO_er, oWshNetwork, oCDO, oFolder, oFiles, oFile, oTextFile, objFile, objRegExp
dim strFileName, strComputerName, LogFile, ForReading, strLine
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFSO_er = CreateObject("Scripting.FileSystemObject")
Set oWshNetwork = WScript.CreateObject("WScript.Network")
Const BACKUP_LOG_PATH = "C:\Documents and Settings\user\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data"
Const EMAIL_RECIPIENT = "admin@admin.ru"
strFileName = ""
strComputerName = oWshNetwork.ComputerName
ForReading = 1
Set objRegExp = CreateObject("VBScript.RegExp") 'Создается объект регулярных выражений

objRegExp.Pattern = "error" 'Указывается ключевые слова поиска
objRegExp.IgnoreCase = True 'Указывается независимость от регистра символов

Set oFolder = oFSO.GetFolder(BACKUP_LOG_PATH)
Set oFiles = oFolder.Files
For Each oFile in oFiles
If oFSO.GetExtensionName(oFile.Name) = "log" Then
  If DateValue(oFile.DateLastModified) = Date() Then
    LogFile = oFile.Name
    strFileName = BACKUP_LOG_PATH & "\" & LogFile
    ' Проверка размера лог-файла 
       If  oFile.Size = "0" Then 
         EmailLogNullFileSize
       End If
    ' Начало проверки файла на наличие  "Error"
    Set objFile = oFSO.OpenTextFile(strFileName, ForReading) ' Открываем файл на чтение
    Dim ErrText
    ErrText=""
    Do Until objFile.AtEndOfStream
      strLine = objFile.ReadLine 'Читаем 1 строку файла
      If objRegExp.Test(strLine) Then 'Проверяем наличие слова "Error" в строке
      ErrText = ErrText & objFile.ReadLine & VbCrLf   
      End If
    Loop
    objFile.Close ' Закрываем файл
    ' Конец проверки файла на наличие  "Error"
    If ErrText="" Then 
      EmailLogNTBackupSuccess ' Если ошибок в лог-файле не обнаружено
    Else
      EmailLogErorFound(ErrText) ' Если есть ошибки в лог-файле обнаружены
    End If
  End If ' Если нет файла с текущей датой
End If ' Если нет лог-файлов
Next

If strFileName = "" Then
  EmailLogNotFound
End If

2

Re: VBS: поиск нескольких фраз в текстовом файле

Возникло 2 вопроса
1) А функция instr не подошла ?
2) Можно на пример лога взглянуть ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3 (изменено: Elencheg, 2011-03-21 11:55:42)

Re: VBS: поиск нескольких фраз в текстовом файле

1. эту функцию не пробовала даже использовать, не знакома с ней....(
2. пример лога:

NTBackup log on APPLE for 3/20/2011 :

Backup Status
Operation: Backup
Active backup destination: File
Media name: "D.bkf created 3/20/2011 at 4:00 AM"

Volume shadow copy creation: Attempt 1.
Backup (via shadow copy) of "D: New Volume"
Backup set #1 on media #1
Backup description: "Set created 5/19/2010 at 6:35 AM"
Media name: "D.bkf created 3/20/2011 at 4:00 AM"

Backup Type: Normal

Backup started on 3/20/2011 at 4:02 AM.
Backup completed on 3/20/2011 at 7:26 AM.
Directories: 9338
Files: 235960
Bytes: 66,737,714,368
Time:  3 hours,  23 minutes, and  15 seconds

----------------------

Verify Status
Operation: Verify After Backup
Active backup destination: File
Active backup destination: \\test\e$\apple\D.bkf

Verify of "D:"
Backup set #1 on media #1
Backup description: "Set created 5/19/2010 at 6:35 AM"
Verify started on 3/20/2011 at 7:26 AM.

Error: An inconsistency was encountered in the requested backup file.
Verify completed on 3/20/2011 at 8:09 AM.
Directories: 7516
Files: 184572
Different: 0
Bytes: 47,217,485,031
Time:  43 minutes and  6 seconds

----------------------

4

Re: VBS: поиск нескольких фраз в текстовом файле

сделала вот так, только думаю что не рационально, зато работает:

Option Explicit
Dim oFSO, oFSO_er, oWshNetwork, oCDO, oFolder, oFiles, oFile, oTextFile, objFile, objRegExp
dim strFileName, strComputerName, LogFile, ForReading, strLine
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFSO_er = CreateObject("Scripting.FileSystemObject")
Set oWshNetwork = WScript.CreateObject("WScript.Network")
Const BACKUP_LOG_PATH = "C:\Documents and Settings\user\Local Settings\Application Data\Microsoft\Windows NT\NTBackup\data"
Const EMAIL_RECIPIENT = "admin@admin.ru"
strFileName = ""
strComputerName = oWshNetwork.ComputerName
ForReading = 1
Set objRegExp = CreateObject("VBScript.RegExp") 'Создается объект регулярных выражений

objRegExp.Pattern = "error" 'Указывается ключевые слова поиска
objRegExp.IgnoreCase = True 'Указывается независимость от регистра символов

Set oFolder = oFSO.GetFolder(BACKUP_LOG_PATH)
Set oFiles = oFolder.Files
For Each oFile in oFiles
If oFSO.GetExtensionName(oFile.Name) = "log" Then
  If DateValue(oFile.DateLastModified) = Date() Then
    LogFile = oFile.Name
    strFileName = BACKUP_LOG_PATH & "\" & LogFile
    ' Проверка размера лог-файла 
       If  oFile.Size = "0" Then 
         EmailLogNullFileSize
       End If
    ' Начало проверки файла на наличие  "Error"
    Set objFile = oFSO.OpenTextFile(strFileName, ForReading) ' Открываем файл на чтение
    Dim ErrText
    ErrText=""
    Do Until objFile.AtEndOfStream
      strLine = objFile.ReadLine 'Читаем 1 строку файла
      If objRegExp.Test(strLine) Then 'Проверяем наличие слова "Error" в строке
      ErrText = ErrText & objFile.ReadLine & VbCrLf   
      End If
    Loop
    objFile.Close ' Закрываем файл
    ' Конец проверки файла на наличие  "Error"
'снова открываем
        objRegExp.Pattern = "The operation did not successfully complete"
        Set objFile = oFSO.OpenTextFile(strFileName, ForReading) ' Открываем файл на чтение
    Dim ErrText1
    ErrText1=""
    Do Until objFile.AtEndOfStream
      strLine = objFile.ReadLine 'Читаем 1 строку файла
      If objRegExp.Test(strLine) Then 'Проверяем наличие слова  в строке
      ErrText1 = ErrText1 & objFile.ReadLine & VbCrLf   
      End If
    Loop
    objFile.Close ' Закрываем файл
'снова открываем-ищем слова 
        objRegExp.Pattern = "Insufficient disk space"
        Set objFile = oFSO.OpenTextFile(strFileName, ForReading) ' Открываем файл на чтение
    Dim ErrText2
    ErrText2=""
    Do Until objFile.AtEndOfStream
      strLine = objFile.ReadLine 'Читаем 1 строку файла
      If objRegExp.Test(strLine) Then 'Проверяем наличие слова  в строке
      ErrText2 = ErrText2 & objFile.ReadLine & VbCrLf   
      End If
    Loop
    objFile.Close ' Закрываем файл
         If (ErrText="" and ErrText1="" and ErrText2="") Then 
      EmailLogNTBackupSuccess ' Если ошибок в лог-файле не обнаружено
    Else
      EmailLogErorFound(ErrText) ' Если есть ошибки в лог-файле обнаружены
    End If
  End If ' Если нет файла с текущей датой
End If ' Если нет лог-файлов
Next

If strFileName = "" Then
  EmailLogNotFound
End If

5

Re: VBS: поиск нескольких фраз в текстовом файле

Возвращает позицию искомой последовательности символов в заданной строке.

InStr([start, ] string1, string2[, compare])
start
Позиция, начиная с которой осуществляется поиск. Если аргумент не задан, поиск начинается с первого символа строки.
string1
Строка, в которой идет поиск.
string2
Искомая последовательность символов.
compare
Опциональный параметр. Может принимать значения vbVinaryCompare (поиск с учетом регистра) и vbTextCompare (поиск без учета регистра символов).
В зависимости от значений входящий параметров функция вернет следующий результат:

Источник

Dim String1, String2

String1 = "01.01.2001. Happend an error string"
String2 = "error"

MsgBox Instr(1,String1,String2,1)

Код возвращает позицию слова "error" в строке.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

6

Re: VBS: поиск нескольких фраз в текстовом файле

Xameleon , спасибо! буду пробовать...

7

Re: VBS: поиск нескольких фраз в текстовом файле

Я бы попробал бы так:

objRegExp.Pattern = "(error)|(did\snot\ssuccessfully\scomplete)|(not)|(Insufficient\sdisk\sspace)"