Компьютерный форум 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=214662)

KaKTuZ49 02-09-2011 17:48 1744854

Найти и обработать строчку в текстовом файле
 
Мужики. Будте любезны помочь =)

Есть текстовый файл.

(Таких текстовых файлов- 6 штук)
Надо найти строки :

Код:

    Следующая публикация CRL
        1 сентября 2011 г. 13:50:00

Строчка - "Следующая сертификация" выступает как ключ, от которого следующая строка и будет являться проверяемой.
Сравнить дату и время с нынешней.
(Брать 10 минут с запасом)
(Т.е. если в 13:59 - то нормально.Если 14:00 - то пишем, что просрочена)
(Придётся переводить текстовый формат даты в дату - не знаю как)
Если не просрочена или просрочена - отсылать соответствующее уведомление на почту.
(Скрипт будет запускаться каждые полчаса/час через планировщик задач).

Коротко:

- Найти текст.
- Взять следующую строку.
- Сравнить дату с нынешней. (месяц надо ещё заставить понимать)
- Отправление на почту

SendMessage 03-09-2011 07:30 1745136

Код:

Option Explicit

Dim fName
Dim objFSO
Dim txtFile
Dim strLine
Dim strMsg
Dim objCDO
Dim Conf

fName = "маршрут нужного файла"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set txtFile = objFSO.OpenTextFile(fName)

Do While Not txtFile.AtEndOfStream
    If InStr(txtFile.ReadLine, "Следующая публикация CRL") Then
      strLine = txtFile.ReadLine
      Exit Do
    End If
Loop

txtFile.Close

If DateDiff("n", CDate(Replace(strLine, "г.", "")), Now) > 9 Then
  strMsg = "Просрочена"
Else
  strMsg = "Не просрочена"
End If

Set objCDO = WScript.CreateObject("CDO.Message")

objCDO.From = "адрес отправителя"   
objCDO.To = "адрес получателя"
objCDO.Subject = "тема сообщения"
objCDO.HTMLBody = strMsg

Set Conf = objCDO.Configuration
  Conf("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2   
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp-сервер отправителя"
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
  Conf("http://schemas.microsoft.com/cdo/configuration/sendusername") = "логин"
  Conf("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "пароль"
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
Conf.Fields.Update

objCDO.Send

Set objFSO = Nothing
Set objCDO = Nothing

WScript.Quit

Цитата:

Цитата KaKTuZ49
(Таких текстовых файлов- 6 штук) »

Как они расположены? Отправлять по каждому файлу отчет собираетесь или по результату проверки всех скопом?

KaKTuZ49 05-09-2011 11:36 1746460

Доброго начала недели всем.

Цитата:

Цитата SendMessage
Как они расположены? »

Они находятся все в одной папке.

Цитата:

Цитата SendMessage
Отправлять по каждому файлу отчет собираетесь или по результату проверки всех скопом? »

Впринципе, без разницы. Хотелось для начала просто реализовать идею. А так - лучше бы в одном письме указать, что если все норм - то норм. Если в одном файле косяк с датой, то просто указать что косяк в том-то или том-то названии.

KaKTuZ49 07-09-2011 17:06 1748178

Спасибо!)))
С вашей помощью доработал для Шести файлов.
Вроде работает!)))

Код:

Dim fName_1
Dim fName_2
Dim fName_3
Dim fName_4
Dim fName_5
Dim fName_6
Dim objFSO
Dim txtFile
Dim strMsg
Dim strMsg_1
Dim strMsg_2
Dim strMsg_3
Dim strMsg_4
Dim strMsg_5
Dim strMsg_6
Dim STR
Dim STR1
Dim STR2
Dim STR3
Dim STR4
Dim STR5
Dim STR6
Dim objCDO
Dim Conf

fName_1 = "c:\scriptcheckcrl\GEgarant.txt"
fName_2 = "c:\scriptcheckcrl\GEgarant2.txt"
fName_3 = "c:\scriptcheckcrl\CA1garant.txt"
fName_4 = "c:\scriptcheckcrl\CA1garant2.txt"
fName_5 = "c:\scriptcheckcrl\CA2garant.txt"
fName_6 = "c:\scriptcheckcrl\CA2garant2.txt"

Set objFSO= WScript.CreateObject("Scripting.FileSystemObject")

'_____________!!!!!!!!ФУНКЦИЯ НАХОЖДЕНИЯ СТРОКИ С ДАТОЙ

Function ReadLineTXT(FileName)
  Set txtFile = objFSO.OpenTextFile(FileName)
      Do While Not txtFile.AtEndOfStream
          If InStr(txtFile.ReadLine, "Следующая публикация CRL") Then
              ReadLineTXT = txtFile.ReadLine
      Exit Do
          End If
      Loop
          txtFile.Close
         
End Function

STR1=ReadLineTXT(fName_1)
STR2=ReadLineTXT(fName_2)
STR3=ReadLineTXT(fName_3)
STR4=ReadLineTXT(fName_4)
STR5=ReadLineTXT(fName_5)
STR6=ReadLineTXT(fName_6)

'_____________!!!!!!!!ФУНКЦИЯ СРАВНЕНИЯ ДАТЫ В ФАЙЛЕ С ТЕКУЩЕЙ

Function SMS(STR)
  If DateDiff("n", CDate(Replace(STR, "г.", "")), Now) > 9 Then
      SMS = "Просрочена"
  Else
      SMS = "Не просрочена"
  End If
End function

strMsg_1=SMS(STR1)
strMsg_2=SMS(STR2)
strMsg_3=SMS(STR3)
strMsg_4=SMS(STR4)
strMsg_5=SMS(STR5)
strMsg_6=SMS(STR6)

'_____________!!!!!!!!СРАВНЕНИЕ СТАТУСОВ КАЖДОГО ФАЙЛА

If (strMsg_1 = "Не просрочена") and (strMsg_2 = "Не просрочена") and (strMsg_3 = "Не просрочена") and (strMsg_4 = "Не просрочена") and (strMsg_5 = "Не просрочена") and (strMsg_6 = "Не просрочена") then
        strMsg = "Не просрочена"
Else
        strMsg = "Просрочена"
End If       


'_____________!!!!!!!!СООБЩЕНИЕ НА ПОЧТОВЫЙ ЯЩИК


Set objCDO = WScript.CreateObject("CDO.Message")

objCDO.From = "Ot kogo"   
objCDO.To = "Komu"
objCDO.Subject = "Проверка CRL"
objCDO.HTMLBody = strMsg

Set Conf = objCDO.Configuration
  Conf("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2   
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp server"
'  Conf("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0
 ' Conf("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Login"
 ' Conf("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Pass"
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
Conf.Fields.Update

objCDO.Send

Set objFSO = Nothing
Set objCDO = Nothing

WScript.Quit

У вас не никаких версий по уменьшению строк?

SendMessage 07-09-2011 18:03 1748225

Цитата:

Цитата KaKTuZ49
У вас не никаких версий по уменьшению строк? »

Можно так:
читать дальше »
Код:

Option Explicit

Dim fName(5)
Dim objFSO
Dim i
Dim txtFile
Dim ReadLineTXT
Dim checkLic
Dim strMsg
Dim objCDO
Dim Conf

fName(0) = "c:\scriptcheckcrl\GEgarant.txt"
fName(1) = "c:\scriptcheckcrl\GEgarant2.txt"
fName(2) = "c:\scriptcheckcrl\CA1garant.txt"
fName(3) = "c:\scriptcheckcrl\CA1garant2.txt"
fName(4) = "c:\scriptcheckcrl\CA2garant.txt"
fName(5) = "c:\scriptcheckcrl\CA2garant2.txt"

Set objFSO= WScript.CreateObject("Scripting.FileSystemObject")

'_____________!!!!!!!!НАХОЖДЕНИЕ СТРОКИ С ДАТОЙ

For i = 0 To UBound(fName)
  Set txtFile = objFSO.OpenTextFile(fName(i))
  Do While Not txtFile.AtEndOfStream
    If InStr(txtFile.ReadLine, "Следующая публикация CRL") Then
      ReadLineTXT = txtFile.ReadLine
      checkLic = checkLic + SMS(ReadLineTXT)
      Exit Do
    End If
  Loop
  txtFile.Close
Next

'_____________!!!!!!!!ФУНКЦИЯ СРАВНЕНИЯ ДАТЫ В ФАЙЛЕ С ТЕКУЩЕЙ

Function SMS(STR)
  If DateDiff("n", CDate(Replace(STR, "г.", "")), Now) > 9 Then
    SMS = 0
  Else
    SMS = 1
  End If
End Function


'_____________!!!!!!!!СРАВНЕНИЕ СТАТУСОВ КАЖДОГО ФАЙЛА

If checkLic = 6 Then
  strMsg = "Не просрочена"
Else
  strMsg = "Просрочена"
End If       

'_____________!!!!!!!!СООБЩЕНИЕ НА ПОЧТОВЫЙ ЯЩИК


Set objCDO = WScript.CreateObject("CDO.Message")

objCDO.From = "Ot kogo"   
objCDO.To = "Komu"
objCDO.Subject = "Проверка CRL"
objCDO.HTMLBody = strMsg

Set Conf = objCDO.Configuration
  Conf("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2   
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp server"
' Conf("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0
' Conf("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Login"
' Conf("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Pass"
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
Conf.Fields.Update

objCDO.Send

Set objFSO = Nothing
Set objCDO = Nothing

WScript.Quit


KaKTuZ49 09-09-2011 14:39 1749662

УРА!!! СПАСИБО ОГРОМНОЕ!
С вашей помощью получилось сделать вот такой код:

Код:


SAVEFILE "http://*****1/garant.crl", "GE", "certutil -split c:\scriptcheckcrl\GEgarant.crl", objExec1, "GEgarant.txt"
SAVEFILE "http://*****1/garant2.crl", "GE", "certutil -split c:\scriptcheckcrl\GEgarant2.crl", objExec2, "GEgarant2.txt"
SAVEFILE "http://*****2/garant.crl", "CA1", "certutil -split c:\scriptcheckcrl\CA1garant.crl", objExec3, "CA1garant.txt"
SAVEFILE "http://*****2/garant2.crl", "CA1", "certutil -split c:\scriptcheckcrl\CA1garant2.crl", objExec4, "CA1garant2.txt"
SAVEFILE "http://*****3/garant.crl", "CA2", "certutil -split c:\scriptcheckcrl\CA2garant.crl", objExec5, "CA2garant.txt"
SAVEFILE "http://*****3/garant2.crl", "CA2", "certutil -split c:\scriptcheckcrl\CA2garant2.crl", objExec6, "CA2garant2.txt"

 
'__________Процедура на скачивание и на преобразование CRL в TXT

 
Sub SAVEFILE(URL1, Base_Name, Command, OBJ1, TXT)
strFileURL = URL1
URL = Split(StrReverse(strFileURL), "/")
basename = Base_Name & StrReverse(URL(0))

strHDLocation = "C:\scriptcheckcrl\" & basename
Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
objXMLHTTP.open "GET", strFileURL, false
objXMLHTTP.send()

 
If objXMLHTTP.Status = 200 Then
 Set objADOStream = CreateObject("ADODB.Stream")
 objADOStream.Open
 objADOStream.Type = 1 'adTypeBinary
 objADOStream.Write objXMLHTTP.ResponseBody
 objADOStream.Position = 0 'Set the stream position to the start
 Set objFSO = Createobject("Scripting.FileSystemObject")
  If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
 Set objFSO = Nothing
 objADOStream.SaveToFile strHDLocation
 objADOStream.Close
 Set objADOStream = Nothing
End if

Set objXMLHTTP = Nothing
Set objShell = CreateObject("WScript.Shell")
strCommand1 = Command

Set OBJ1 = objShell.Exec(strCommand1)
While objExec1.Status = 0
        WScript.Sleep 20
Wend
strOutput = Replace(OBJ1.StdOut.ReadAll, VbCrLf & "CertUtil: -split command completed successfully.", "")
 
With WScript.CreateObject("Scripting.FileSystemObject").CreateTextFile(TXT, True)
    .Write strOutput
    .Close
End With

End Sub

 
'____________________________________________________________________________
Dim fName(5)
Dim objFSO
Dim i
Dim txtFile
Dim ReadLineTXT
Dim checkLic
Dim strMsg
Dim objCDO
Dim Conf
Dim DataCrl(5)
 
fName(0) = "c:\scriptcheckcrl\GEgarant.txt"
fName(1) = "c:\scriptcheckcrl\GEgarant2.txt"
fName(2) = "c:\scriptcheckcrl\CA1garant.txt"
fName(3) = "c:\scriptcheckcrl\CA1garant2.txt"
fName(4) = "c:\scriptcheckcrl\CA2garant.txt"
fName(5) = "c:\scriptcheckcrl\CA2garant2.txt"

 
Set objFSO= WScript.CreateObject("Scripting.FileSystemObject")

'_____________!!!!!!!!НАХОЖДЕНИЕ СТРОКИ С ДАТОЙ
For i = 0 To UBound(fName)
  Set txtFile = objFSO.OpenTextFile(fName(i))
  Do While Not txtFile.AtEndOfStream
    If InStr(txtFile.ReadLine, "Следующая публикация CRL") Then
      ReadLineTXT = txtFile.ReadLine
      checkLic = checkLic + SMS(ReadLineTXT)
  DataCrl(i) = ReadLineTXT
      Exit Do
    End If
  Loop
  txtFile.Close
Next
 
'_____________!!!!!!!!ФУНКЦИЯ СРАВНЕНИЯ ДАТЫ В ФАЙЛЕ С ТЕКУЩЕЙ

Function SMS(STR)
  If DateDiff("n", CDate(Replace(STR, "г.", "")), Now) > 9 Then
    SMS = 0
  Else
    SMS = 1
  End If
End Function
 
'_____________!!!!!!!!СРАВНЕНИЕ СТАТУСОВ КАЖДОГО ФАЙЛА
 
If checkLic = 6 Then
  strMsg = "Не просрочена"
Else
  strMsg = "Просрочена"
End If

'_____________!!!!!!!!СООБЩЕНИЕ НА ПОЧТОВЫЙ ЯЩИК
 
Set objCDO = WScript.CreateObject("CDO.Message")
objCDO.From = "ОТ КОГО"   
objCDO.To = "КОМУ"
objCDO.Subject = "Проверка CRL"

objCDO.HTMLBody = strMsg & "<br>" & "<br>" & "GEgarant.txt" & DataCrl(0) & "<br>" &  "GEgarant2.txt" & DataCrl(1) & "<br>" &  "CA1garant.txt" & DataCrl(2) & "<br>" &  "CA1garant2.txt" & DataCrl(3) & "<br>" &  "CA2garant.txt" & DataCrl(4) & "<br>" &  "CA2garant2.txt" & DataCrl(5)

Set Conf = objCDO.Configuration
  Conf("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2   
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp сервер"
' Conf("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 0
' Conf("http://schemas.microsoft.com/cdo/configuration/sendusername") = "Login"
' Conf("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Pass"
  Conf("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
Conf.Fields.Update
 
objCDO.Send

Set objFSO = Nothing
Set objCDO = Nothing
 
WScript.Quit

!!! Объясните только, почему создается в папке ещё Blob0_0.crl ????

sov44 29-05-2012 13:21 1924436

Есть текстовый файл типа
Код:

мороз
и
солнце
день
чудесный

Необходимо проверить наличие слова "день" и вывести сообщение, есть это слово в файле или нет. Попробовал так, но запутался в %Errorlevel%
Код:

@echo off
SetLocal enabledelayedexpansion
for /f "usebackq delims=" %%a in (`type "1.txt" ^|find "день"`) do set s=%%a
If %Errorlevel% GEQ 0 (echo слово день найдено) else (echo слово день не найдено)
Echo %s%
pause


Anonymоus 29-05-2012 13:41 1924455

sov44, а для чего вы цикл используете?
Код:

Set Word=день
Type file.txt|Find "%Word%">nul&&(
    Echo Found %Word% in file.txt
)||(
    Echo Nothing found
)


sov44 29-05-2012 13:50 1924461

Цитата:

Цитата Anonymоus
v44, а для чего вы цикл используете? »

Anonymоus, действительно, цикл лишний, нужно было просто найти слово :) Спасибо за подсказку!


Время: 20:18.

Время: 20:18.
© OSzone.net 2001-