Показать полную графическую версию : [решено] Помогите создать батник для отслеживания изменений файла и отправки сообщения на майл
sergeyhopper
05-07-2010, 14:49
Доброго времени суток, есть задача следить за файлом с расширением .dbf и если в течении заданного времени не происходит его изменение, то выходит сообщение и отправляется сообщение на почтовый ящик. Очень надо
sergeyhopper
05-07-2010, 14:58
можно следить за размером и датой изменения
Под CMD такой сценарий не сделать, ну не работает он с mail.object (на форуме это есть и описание утилиты Blat (http://sourceforge.net/projects/blat/files/) тоже):
Возможные варианты сценариев можно написать на VBS, JS и PS.
Предлагаю скрипт на vbs (files_control.vbs ) :
Option Explicit
Dim objFSO, objFile
Dim strPath2SourceFolder, strMessage, strheadlist
Dim intPrefixб Count, Message, iConf, Flds
strPath2SourceFolder = "директория расположения контролируемых файлов"
strMessage = vbNullString
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
For Each objFile In objFSO.GetFolder(strPath2SourceFolder).Files
if UCase(objFSO.GetExtensionName(objFile.Name)) = UCase("dbf") And _
DateDiff("D", objFile.DateLastModified, Now) = 0 Then
Count=Count+1
strMessage = strMessage & Count & ". " & objFSO.GetFileName(objFile.Name) & vbCrLf
Attach = "" & strPath2SourceFolder & objFSO.GetFileName(objFile.Name) _
& "" ' * Получаем имя файла с путем
End If
Message.AddAttachment (Attach) ' * Описываем вложение для отправки
next
strMessage = "Следующие файлы были изменены:" & vbCrLf & strMessage
strMessage = strMessage & vbCrLf & "Всего измененных файлов: "& Count
if Count > 0 Then
' непосредственно блок работы с почтой ---------------------------------------------------------------------------------
Set Message = CreateObject("CDO.Message")
Message.To = "кому@mail.ru"
Message.From = "от_кого@mail.ru"
Message.Subject = "RE: ! Warning!"
Message.TextBody = strMessage
Message.BodyPart.Charset = "windows-1251"
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.mail.ru"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 2525
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "Ваш_пароль"
Flds.Update
Message.Configuration = iConf
Message.Send
End If
WScript.Quit 0
Небольшое пояснение: проверка осуществляется по дате последнего изменения файлов с заданным расширением, после этого формируется список измененных файлов, который и отправляется на e-mail... , твое "заданное время" определяется строкой " DateDiff("D", objFile.DateLastModified, Now) = 0 ", в которой параметр = 0 и определяет этот интервал, можно использовать знаки "> <", например: > 7, т.е. если некие файлы были изменены более 7 дней назад, то жди весточку на почту...
Подсказку для написания подобного скрипта под PS можно найти з д е с ь (http://gallery.technet.microsoft.com/ScriptCenter/en-us/cfcbd6a4-ef7d-474c-938a-ff8cdb4fce03), для JAVA мне писать лень...
PS: Скрипт обновлен! Все недочеты исключены!
PPS: В сценарий внесена функция отправки измененных файлов, строки выделены красным цветом. [24.08.2010]
sergeyhopper
06-07-2010, 08:21
deepred, огромное тебе спасибо сегодня попробую!
sergeyhopper
06-07-2010, 09:29
скрипт работает отлично, но можно сделать так, если время последнего изменения больше скажем, 2-х часов, то тогда приходит сообщение? и второй момент, как период изменить, скажем не на дни, а на часы? Заранее большое спасибо!!!
Да можно сделать и по часам...
Смотри, строка DateDiff("D", objFile.DateLastModified, Now) содержит этот временной критерий - переменная "D", вхождением этой переменной могут быть:
"yyyy" - год
"q" - квартал
"m" - месяц
"y" - день года
"d" - день
"w" - день недели
"ww" - неделя года
"h" - час
"n" - минута
"s" - секунда
, т.е. тебе нужно использовать значение интервала "h" > 2
sergeyhopper
06-07-2010, 16:11
deepred, да, спасибо разобрался, только немного скрипт подправили, а то он не зависимо от того менялся файл или нет отправлял сообщения.
Сделал вот так:
Option Explicit
Dim objFSO, objFile
Dim strPath2SourceFolder
Dim intPrefix, strMessage, strheadlist
Dim intErrLevel
Dim Message, iConf, Flds
strPath2SourceFolder = "D:\Temp\1C\"
intErrLevel = 0
strMessage = vbNullString
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
For Each objFile In objFSO.GetFolder(strPath2SourceFolder).Files
if UCase(objFSO.GetExtensionName(objFile.Name)) = UCase("txt") And DateDiff("n", objFile.DateLastModified, Now) > 1 Then
strMessage = strMessage & objFSO.GetFileName(objFile.Name) & vbCrLf
End If
next
if len(strMessage) > 1 then
strMessage = "Внимание, следующие файлы были изменены:"& vbCrLf & strMessage
Set Message = CreateObject("CDO.Message")
Message.To = "почтовый ящик куда придёт сообщение"
Message.From = "что будет указано в графе от"
Message.Subject = "RE: ! Warning!"
Message.TextBody = strMessage
Message.BodyPart.Charset = "windows-1251"
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp сервер"
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
Flds.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
Flds.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "пароль"
Flds.Update
Message.Configuration = iConf
Message.Send
end if
WScript.Quit 0
Всем спасибо!!!
sergeyhopper
07-07-2010, 10:23
хорошо, спасибо!
lohi1234567
22-09-2010, 08:26
не работает :(
мэйл пишет что не авторизирован. пароль верный адрес тоже.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.