Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Найти и обработать строчку в текстовом файле

Ответить
Настройки темы
VBS/WSH/JS - [решено] Найти и обработать строчку в текстовом файле

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


Мужики. Будте любезны помочь

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

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

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

Коротко:

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

Отправлено: 17:48, 02-09-2011

 

Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
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 штук) »
Как они расположены? Отправлять по каждому файлу отчет собираетесь или по результату проверки всех скопом?

Последний раз редактировалось SendMessage, 03-09-2011 в 10:14. Причина: исправление в скрипте

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:30, 03-09-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Цитата SendMessage:
Как они расположены? »
Они находятся все в одной папке.

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

Отправлено: 11:36, 05-09-2011 | #3


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
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
У вас не никаких версий по уменьшению строк?

Отправлено: 17:06, 07-09-2011 | #4


Старожил


Сообщения: 175
Благодарности: 119

Профиль | Отправить PM | Цитировать


Цитата 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
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:03, 07-09-2011 | #5


Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Код: Выделить весь код
 
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 ????

Отправлено: 14:39, 09-09-2011 | #6


Ветеран


Сообщения: 2204
Благодарности: 729

Профиль | Отправить PM | Цитировать


Есть текстовый файл типа
Код: Выделить весь код
мороз
и
солнце
день
чудесный
Необходимо проверить наличие слова "день" и вывести сообщение, есть это слово в файле или нет. Попробовал так, но запутался в %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

Отправлено: 13:21, 29-05-2012 | #7


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


sov44, а для чего вы цикл используете?
Код: Выделить весь код
Set Word=день
Type file.txt|Find "%Word%">nul&&(
    Echo Found %Word% in file.txt
)||(
    Echo Nothing found
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:41, 29-05-2012 | #8


Ветеран


Сообщения: 2204
Благодарности: 729

Профиль | Отправить PM | Цитировать


Цитата Anonymоus:
v44, а для чего вы цикл используете? »
Anonymоus, действительно, цикл лишний, нужно было просто найти слово Спасибо за подсказку!

Отправлено: 13:50, 29-05-2012 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Найти и обработать строчку в текстовом файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Задавать значения и путь в текстовом файле white155 Скриптовые языки администрирования Windows 4 16-04-2011 14:10
CMD/BAT - Подсчет количества целых чисел в текстовом файле Hardip Скриптовые языки администрирования Windows 5 08-12-2010 14:49
CMD/BAT - [решено] Удалить в текстовом файле по условию AlexVong Скриптовые языки администрирования Windows 1 21-11-2010 11:53
[решено] Найти и заменить в текстовом файле. Как? Pozia AutoIt 15 11-03-2010 19:12
подсчёт слов в текстовом файле bakatum Хочу все знать 4 22-01-2010 21:10




 
Переход