Войти

Показать полную графическую версию : [решено] Помогите создать батник для отслеживания изменений файла и отправки сообщения на майл


sergeyhopper
05-07-2010, 14:49
Доброго времени суток, есть задача следить за файлом с расширением .dbf и если в течении заданного времени не происходит его изменение, то выходит сообщение и отправляется сообщение на почтовый ящик. Очень надо

sergeyhopper
05-07-2010, 14:58
можно следить за размером и датой изменения

deepred
05-07-2010, 18:37
Под 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-х часов, то тогда приходит сообщение? и второй момент, как период изменить, скажем не на дни, а на часы? Заранее большое спасибо!!!

deepred
06-07-2010, 12:44
Да можно сделать и по часам...

Смотри, строка 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