Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - ASP и VBScript

Страница: 1 | 2 |

 

  Вопрос: Проверка разницы текущего времени и даты изменения Добавлено: 26.04.11 11:55  

Автор вопроса:  westsouthnight | Web-сайт: woinc.ru (down) | ICQ: 249205371 
Добрый день! Уже пару дней бьюсь над задачей, которая заключается в следующем.

 Есть фаил c:\11.xls к примеру. Текущее время 11.30 утра. Если фаил не изменялся последние 3 или 5 минут высылать на почту сообщение.

 Есть VBS скрипт отправки почты - он работает.

 Есть скрипт проверки разници времени изменения с текущей датой минус 3 минуты - работает или нет не знаю.

 Необходимо объединить и сделать работающим скрипт выполняющий данную задачу.

 Могу вложить скрипты аттачем, или в тело сообщения.

 Очень прошу помочь!

 С уважением, WestSouthnight.

Ответить

  Ответы Всего ответов: 18  

Номер ответа: 1
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #1 Добавлено: 26.04.11 12:46
Почему 100% топикстартеров, которые хотят, чтобы за них нахаляву сделали какую-либо работу, называют это не именно так, а "прошу помочь"?..

Ответить

Номер ответа: 2
Автор ответа:
 westsouthnight



ICQ: 249205371 

Вопросов: 1
Ответов: 10
 Web-сайт: woinc.ru (down)
 Профиль | | #2
Добавлено: 26.04.11 14:17
Ну вообще, прошу реально помочь, так как гугл изрыл, ответа найти как сделать данную задачу не могу. Есть пара скриптов. Я не программист, хотя во многом могу разобраться. Но данная ситуация поставила меня в тупик!

Скрипты ниже.

Скрипт отправки почты -

  1. 'Отправить сообщение с помощью локальной службы SMTP
  2. Const cdoSendUsingPickup = 1  
  3. Set objMessage = CreateObject("CDO.Message")  
  4. ' Тема сообщения и адрес отправителя
  5. objMessage.Subject = "Тема письма"  
  6. objMessage.From = "monitoring@domain.com"
  7. ' Получатели письма указываются через " ; "
  8. objMessage.To = "admin-group@domain.com"  
  9. ' Содержимое тела письма.  
  10. objMessage.TextBody = "Тело письма"
  11. ' Добавляем файл - вложение для отправки отчета по EMail
  12. objMessage.AddAttachment "C:\11.xls"
  13. ' Секция настроек SMTP сервера для отправки почты.  
  14. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2  
  15. ' Имя или IP адрес SMTP Server
  16. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.0.2"
  17. ' Тип используемой авторизации, NONE, Basic (Base64 encoded), NTLM
  18. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = NTLM
  19. ' SMTP server
  20. objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"  
  21. ' Авторизация на SMTP server
  22. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "monitoring@domain.com"
  23. ' Пароль SMTP server
  24. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = ""
  25. ' Порт SMTP Server port (обычно 25, но может быть и другим)  
  26. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25  
  27. ' Использование SSL для соединения (False или True)  
  28. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
  29. ' Время ожидания соединения с почтовым сервером
  30. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
  31. ' Сохранить настройки CDO для отправки сообщения
  32. objMessage.Configuration.Fields.Update
  33. ' Отправить созданное почтовое сообщение с вложением по указанному адресу
  34. objMessage.Send
  35. Wscript.Quit


Скрипт проверки разницы даты изменения фаила с текущим временем минус три минуты -

  1. Public Function OtpravliatLi()
  2. If DateDiff("n", FileDateTime("c:\11.xls"), Date + Time) > 3 Then
  3. MsgBox ("Отправить")
  4. End If
  5. End Function


В форумных делах я не мастер, и топики как создавать так и писать особо не умею. За жизнь может было постов 25.
Обычно находил информацию, и составлял скрипты для задач сам, но на данный момент, не знаю как реализовать код.

Прошу искренне помочь!

С уважением, WestSouthnight.

Ответить

Номер ответа: 3
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #3 Добавлено: 26.04.11 14:57
прошу )
  1.  
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. Set f = fso.getfile("c:\11.xls")
  4. Diff = DateDiff("n", f.DateLastModified, Now)
  5. 'Diff = DateDiff("n", f.DateCreated, Now)
  6. 'Diff = DateDiff("n", f.DateLastAccessed, Now)
  7. 'yyyy — Год
  8. 'm  — Месяц
  9. 'd  — День
  10. 'h  — Часы
  11. 'n  — Минуты
  12.  
  13. If Diff > 3 Then
  14. 'msgbox "письмо"
  15. end if

Ответить

Номер ответа: 4
Автор ответа:
 westsouthnight



ICQ: 249205371 

Вопросов: 1
Ответов: 10
 Web-сайт: woinc.ru (down)
 Профиль | | #4
Добавлено: 26.04.11 16:58
Может я все же что-то не так делаю. Это скорее всего 100%. Добрый товарищ Just!
Ваш код при всех случаях выдает сообщение "письмо", (если раскоментировать msgbox "письмо";),
даже если фаил изменялся за последние три минуты.(проверял)
Наверняка нужно переместить данную строку выше, или наоборот ниже. Прошу разъясните!
Так и не получается собрать конструкцию воедино!

  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set f = fso.getfile("c:\11.xls")
  3. Diff = DateDiff("n", f.DateLastModified, Now)
  4. 'Diff = DateDiff("n", f.DateCreated, Now)
  5. 'Diff = DateDiff("n", f.DateLastAccessed, Now)
  6. 'yyyy — Год
  7. 'm  — Месяц
  8. 'd  — День
  9. 'h  — Часы
  10. 'n  — Минуты
  11.  
  12. If Diff > 3 Then
  13. msgbox "письмо"
  14. 'Отправить сообщение с помощью локальной службы SMTP
  15. Const cdoSendUsingPickup = 1  
  16. Set objMessage = CreateObject("CDO.Message")  
  17. ' Тема сообщения и адрес отправителя
  18. objMessage.Subject = "Тема письма"  
  19. objMessage.From = "monitoring@domain.com"
  20. ' Получатели письма указываются через " ; "
  21. objMessage.To = "admin-group@domain.com"  
  22. ' Содержимое тела письма.  
  23. objMessage.TextBody = "Тело письма"
  24. ' Добавляем файл - вложение для отправки отчета по EMail
  25. objMessage.AddAttachment "C:\11.xls"
  26. ' Секция настроек SMTP сервера для отправки почты.  
  27. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2  
  28. ' Имя или IP адрес SMTP Server
  29. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.0.2"
  30. ' Тип используемой авторизации, NONE, Basic (Base64 encoded), NTLM
  31. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = NTLM
  32. ' SMTP server
  33. objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"  
  34. ' Авторизация на SMTP server
  35. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "monitoring@domain.com"
  36. ' Пароль SMTP server
  37. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = ""
  38. ' Порт SMTP Server port (обычно 25, но может быть и другим)  
  39. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25  
  40. ' Использование SSL для соединения (False или True)  
  41. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
  42. ' Время ожидания соединения с почтовым сервером
  43. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
  44. ' Сохранить настройки CDO для отправки сообщения
  45. objMessage.Configuration.Fields.Update
  46. ' Отправить созданное почтовое сообщение с вложением по указанному адресу
  47. objMessage.Send
  48. Wscript.Quit
  49. end if


Письмо в данном случает полюбому приходит, а необходимо чтобы приходило, только в том случае, если фаил не изменялся за последние 3 минуты.

Заранее спасибо.

С уважением, WestSouthnight.

Ответить

Номер ответа: 5
Автор ответа:
 westsouthnight



ICQ: 249205371 

Вопросов: 1
Ответов: 10
 Web-сайт: woinc.ru (down)
 Профиль | | #5
Добавлено: 26.04.11 17:30
На сколько я могу предположить, сравнение производится просто с цифрой 3, а не с текущим временем минус три минуты, и по этому постоянно приходят письма. Допустим время сейчас 17.27 сравниваем с цифрой три и получаем на почтовый ящик письмо. Или в другом код неверный, а операция сравнения работает правильно! Ребята, покажите мне, где сдесь, что не так. Ломаю голову!

С уважением, WestSouthnight.

Ответить

Номер ответа: 6
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #6 Добавлено: 26.04.11 17:33
должно вроде работать..
а что выдает в сообщениях сл скрипта?
  1.  
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. Set f = fso.getfile("c:\11.xls")
  4. msgbox f.DateLastModified
  5. msgbox Now
  6. msgbox DateDiff("n", f.DateLastModified, Now)



и кстати, можно попробовать сравнивать вот так: If clng(Diff) > 3 Then

ps если не оскорбит, можно на "ты" и без "с уважением" в каждом посте? )

Ответить

Номер ответа: 7
Автор ответа:
 westsouthnight



ICQ: 249205371 

Вопросов: 1
Ответов: 10
 Web-сайт: woinc.ru (down)
 Профиль | | #7
Добавлено: 26.04.11 18:14
Хорошо, на ты конечно можно. Следующий скрипт -
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set f = fso.getfile("c:\11.xls")
  3. msgbox f.DateLastModified
  4. msgbox Now
  5. msgbox DateDiff("n", f.DateLastModified, Now)


Выдает соответственно
- время изменения
- текущее время
- разницу (сейчас 74)

Правильно ли я составил скрипт который выше? На сколько понимаю, он должен высылать почту только в случае если разница больше трёх минут, и проверка проходит отлично, однако почта присылается в любом случае.

Ответить

Номер ответа: 8
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #8 Добавлено: 26.04.11 18:22
сверху скрипт отсылает почту только если разница более 3

алгоритм прост:
-проверил время файла и системы
-вычислил разницу
-если разница больше (3 минуты), то...

Ответить

Номер ответа: 9
Автор ответа:
 westsouthnight



ICQ: 249205371 

Вопросов: 1
Ответов: 10
 Web-сайт: woinc.ru (down)
 Профиль | | #9
Добавлено: 26.04.11 18:23
Заменил

  1. Diff = DateDiff("n", f.DateLastModified, Now)


 на

  1. If clng(Diff) > 3 Then


результат при первой проверке тот же, письма приходят в обоих случаях.

Ответить

Номер ответа: 10
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #10 Добавлено: 26.04.11 18:24
можно еще чуть изменить проверку

if diff > 3 then
 отсылать
else
 не отсылать
end if
wscript.Quit

Ответить

Номер ответа: 11
Автор ответа:
 westsouthnight



ICQ: 249205371 

Вопросов: 1
Ответов: 10
 Web-сайт: woinc.ru (down)
 Профиль | | #11
Добавлено: 26.04.11 18:42
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set f = fso.getfile("c:\11.xls")
  3. Diff = DateDiff("n", f.DateLastModified, Now)
  4. If Diff > 3 Then
  5. Const cdoSendUsingPickup = 1  
  6. Set objMessage = CreateObject("CDO.Message")  
  7. objMessage.Subject = "Тема письма"  
  8. objMessage.From = "monitoring@domain.com"
  9. objMessage.To = "admin-group@domain.com"  
  10. objMessage.TextBody = "Тело письма"
  11. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2  
  12. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.0.2"
  13. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = NTLM
  14. objMessage.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"  
  15. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "monitoring@domain.com"
  16. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = ""
  17. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
  18. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
  19. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
  20. objMessage.Configuration.Fields.Update
  21. objMessage.Send
  22. Else
  23. Msgbox "Все хорошо. Данные изменяются"
  24. Wscript.Quit
  25. End if


В конце менял местами

  1. Wscript.Quit
  2. End if


Не помогает. Почта приходит все равно. Скрипт не доходит до else.

Ответить

Номер ответа: 12
Автор ответа:
 westsouthnight



ICQ: 249205371 

Вопросов: 1
Ответов: 10
 Web-сайт: woinc.ru (down)
 Профиль | | #12
Добавлено: 26.04.11 18:46
Just - спасибо, что помогаешь.

Ответить

Номер ответа: 13
Автор ответа:
 westsouthnight



ICQ: 249205371 

Вопросов: 1
Ответов: 10
 Web-сайт: woinc.ru (down)
 Профиль | | #13
Добавлено: 26.04.11 18:51
Может можно вывести отправку почты в отдельный кусок кода, и определить отправку почты "переменной"?
Чтобы к примеру при проверки дат
  1. If
дергал переменную(класс, массив), в голове каша, извините меня.
Возможно
  1. If Else
не нравится, что код идет сразу, и он отрабатывает не обращая внимания на зависимости.
Хотя, такого быть не скорее всего не должно, конечно, но с виду так и происходит.

Ответить

Номер ответа: 14
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #14 Добавлено: 26.04.11 19:38
Just - спасибо, что помогаешь.

ну в свое время мне тоже помогали здесь, так что если есть время, отрабатываю )

а по поводу скрипта... через часик напишу полностью скрипт и скину сюда, проще будет

Ответить

Номер ответа: 15
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #15 Добавлено: 26.04.11 20:23
вот полностью скрипт, должен работать... )

  1.  
  2. Dim objFSO, objFile, strFilePath, lngDifference
  3.  
  4. strFilePath = "c:\11.xls"
  5.  
  6.  
  7. Set objFSO = CreateObject("Scripting.FileSystemObject")
  8. If Not objFSO.fileexists(strFilePath) Then ExitScript()
  9.  
  10. Set objFile = objFSO.getfile(strFilePath)
  11. lngDifference = DateDiff("n", objFile.DateLastModified, Now)
  12.  
  13.  
  14. If CLng(lngDifference) < 3 Then
  15.   MsgBox "разница: " & lngDifference, , "не посылать письмо"
  16.   ExitScript()
  17. Else
  18.   MsgBox "разница: " & lngDifference, , "послать письмо"
  19.   'SendMail()
  20.   ExitScript()
  21. End If
  22.  
  23.  
  24.  
  25.  
  26. Sub ExitScript()
  27. MsgBox "выход"
  28. Set objFile = Nothing
  29. Set objFSO = Nothing
  30. Wscript.quit
  31. End Sub
  32.  
  33.  
  34. Sub SendMail()
  35. Const cdoSendUsingPickup = 1
  36. Set objMessage = CreateObject("CDO.Message")
  37. objMessage.Subject = "Тема письма"
  38. objMessage.From = "monitoring@domain.com"
  39. objMessage.To = "admin-group@domain.com"
  40. objMessage.TextBody = "Тело письма"
  41. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
  42. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.0.2"
  43. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = NTLM
  44. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.com"
  45. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "monitoring@domain.com"
  46. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = ""
  47. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
  48. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
  49. objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
  50. objMessage.Configuration.Fields.Update
  51. objMessage.Send
  52. End Sub

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам