Показать полную графическую версию : [решено] Найти и обработать строчку в текстовом файле
KaKTuZ49
02-09-2011, 17:48
Мужики. Будте любезны помочь =)
Есть текстовый файл.
(Таких текстовых файлов- 6 штук)
Надо найти строки :
Следующая публикация CRL
1 сентября 2011 г. 13:50:00
Строчка - "Следующая сертификация" выступает как ключ, от которого следующая строка и будет являться проверяемой.
Сравнить дату и время с нынешней.
(Брать 10 минут с запасом)
(Т.е. если в 13:59 - то нормально.Если 14:00 - то пишем, что просрочена)
(Придётся переводить текстовый формат даты в дату - не знаю как)
Если не просрочена или просрочена - отсылать соответствующее уведомление на почту.
(Скрипт будет запускаться каждые полчаса/час через планировщик задач).
Коротко:
- Найти текст.
- Взять следующую строку.
- Сравнить дату с нынешней. (месяц надо ещё заставить понимать)
- Отправление на почту
SendMessage
03-09-2011, 07:30
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
(Таких текстовых файлов- 6 штук) »
Как они расположены? Отправлять по каждому файлу отчет собираетесь или по результату проверки всех скопом?
KaKTuZ49
05-09-2011, 11:36
Доброго начала недели всем.
Как они расположены? »
Они находятся все в одной папке.
Отправлять по каждому файлу отчет собираетесь или по результату проверки всех скопом? »
Впринципе, без разницы. Хотелось для начала просто реализовать идею. А так - лучше бы в одном письме указать, что если все норм - то норм. Если в одном файле косяк с датой, то просто указать что косяк в том-то или том-то названии.
KaKTuZ49
07-09-2011, 17:06
Спасибо!)))
С вашей помощью доработал для Шести файлов.
Вроде работает!)))
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
У вас не никаких версий по уменьшению строк? »
Можно так: 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
УРА!!! СПАСИБО ОГРОМНОЕ!
С вашей помощью получилось сделать вот такой код:
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 ????
Есть текстовый файл типа
мороз
и
солнце
день
чудесный
Необходимо проверить наличие слова "день" и вывести сообщение, есть это слово в файле или нет. Попробовал так, но запутался в %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
sov44, а для чего вы цикл используете?
Set Word=день
Type file.txt|Find "%Word%">nul&&(
Echo Found %Word% in file.txt
)||(
Echo Nothing found
)
v44, а для чего вы цикл используете? »
Anonymоus, действительно, цикл лишний, нужно было просто найти слово :) Спасибо за подсказку!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.