1

Тема: VBS: путь папок из даты

Доброго вам.
задача прилепленного ниже скрипта, найденного здесь, делать архив из папки и отправлять на мыло. Необходима некоторая корректировка и доработка, помогите плиз
1) исключить отправку файла лога, отправлять только созданный архив
2) и наверное самое необходимое прописать меняющийся путь к папке из которой делать архив, а именно, путь такой C:\папка\2010\10\28.html -> C:\ папка \год \ месяц \ файл дата.html.

Задача в идеале такова. Нужно каждый день из  C:\ папка \ отправлять файлы за вчерашний день упакованными в архиве. Получается если сегодня 28.10.2010 нужно отправить файл  C:\папка\2010\10\27.html  Ну и понятно с переменной месяца и года путь должен меняться.
заранее спасибо за помощь

Dim dtNow
Dim archname
Dim LogPath 'Путь к файлу лога этого скрипта
Dim LogFile 'Поток текстового файла лога этого скрипта
Dim fso
Dim fldrpath 
Dim folder 
Dim filelist 
Dim curfile 
Dim result
Dim messbody

'Имя архива, без даты.
archname = "name.rar"
'Работаем с датой.
dtNow = Now()
archdfile = Year(dtNow) & Right("00" & CStr(Month(dtNow)), 2) & Right("00" & CStr(Day(dtNow)), 2) & "_" & archname
'Путь к файлам для добалвения в архив.
fldrpath= "C:\Temp\"
'Путь и имя файла лога.
LogPath = (fldrpath & "1.txt")
'Скрипт для отправки сообщения пользователям и архивирования файла. 
filePath = (fldrpath & "1.txt")
'Путь куда архивируем и имя файлаю archPath = ("H:\distrib\Panasonic\" & archdfile)
archway= "C:\"
archPath = ( archway & archdfile )
'Путь до прграммы архиватора.
winRarPath = """C:\Program Files\WinRAR\WinRAR.exe"""
'Тема емаил сообщения.
themes = "Отправляю копию " & archdfile  & " архива файла " & filePath
'Тело сообщения.
bodytext = "Отправляю архивную копию файла" & archdfile &  " на почту " 
'Укажем нужную кодировку.
charset = "windows-1251"
'Тут указываем от кого отправляются сообщения. 
sender = "mail"
'Список или одного получателя кому отправлять сообщения. Есди нужно указать несколько то через запятую.
recipients = "mail"
'Пароль пароль для отправителя
Passwd = "пасс"
'Сервер smtp
host = "smtp.yandex.ru"


'Архивация файла.
Set fs = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
        WshShell.Run winRarPath & " a " & archPath & " " & filePath, 0, True

'Пишем лог.
Set FSO = CreateObject("Scripting.FileSystemObject")
IF fso.FileExists(LogPath) Then
   Set LogFile = FSO.CreateTextFile(LogPath)
   LogFile.WriteLine "============Начало лога.======================"
   LogFile.WriteLine (Now)
   LogFile.WriteLine "============Что архивируем.======================"
   LogFile.WriteLine (filePath)

set fso = createobject("Scripting.FileSystemObject")
do while not fso.folderexists(fldrpath)
loop
set folder=fso.GetFolder(fldrpath) 'установим папку
set filelist=folder.files 'прочитаем в коллекцию все подпапки
For Each curfile in filelist 'для каждой подпапки сделаем следующее:
          result = result & curfile.name & "; Атрибуты: " & curfile.attributes & "; Дата создания: " & curfile.DateCreated & _
        "; Дата посл. доступа: " & curfile.DateLastAccessed & "; Дата последнего изменения: " & curfile.DateLastModified & _
        "; Диск: " & curfile.drive & "; Находится в: " & curfile.parentfolder & _
        "; Полный путь: " & curfile.path & "; Размер: " & curfile.size/1024 & " кб; Тип: " & curfile.type
    result=result & vbcrlf & vbcrlf 'думаю из названий назначение функций понятно
Next

LogFile.Write "Здесь записаны результаты опроса папки " & fldrpath & " и всех доступных фаилов" 'напишем
LogFile.writeblanklines 2
LogFile.write "Обнаружено: " & filelist.count & " фаилов" & vbcrlf & result 'ну и собственно результаты
LogFile.WriteLine "============Файл архива, с датой.======================"
LogFile.WriteLine (archPath)
LogFile.WriteLine "============Конец лога.======================"
LogFile.WriteLine (Now)
LogFile.Close
End if

WScript.Sleep 60

set fso = createobject("Scripting.FileSystemObject")
do while not fso.folderexists(fldrpath)
    loop
set folder=fso.GetFolder(fldrpath) 'установим папку
set filelist=folder.files 'прочитаем в коллекцию все подпапки
For Each curfile in filelist 'для каждой подпапки сделаем следующее:
          messbody = messbody & curfile.name 
    messbody=messbody & vbcrlf 'думаю из названий назначение функций понятно
Next

Sendmail


Sub sendmail
Set objEmail = CreateObject("CDO.Message")
objEmail.From = sender 'Тут указываем от кого отправляются сообщения. 
objEmail.To = recipients 'Список или одного получателя кому отправлять сообщения.
objEmail.Subject = themes 'Тема письма.
objEmail.BodyPart.CharSet = charset
objEmail.Textbody = bodytext & vbcrlf & "Обнаружен: " & filelist.count & "-файл." & vbcrlf & messbody 'Само письмо!
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = sender 'Учетная запись.
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = Passwd 'Пароль. 
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = host 'Сервер.
objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 'Порт исходящего сервера. 
objEmail.AddAttachment archPath
objEmail.AddAttachment LogPath
objEmail.Configuration.Fields.Update
objEmail.Send

End sub

2

Re: VBS: путь папок из даты

И в чём проблема сделать это?

3

Re: VBS: путь папок из даты

alexii, проблема моя в том что в скриптах понимаю крайне мало, а точнее совсем не понимаю. Помогите если это не сложно

4

Re: VBS: путь папок из даты

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

5

Re: VBS: путь папок из даты

видимо не очень то это и легко, раз никто не пишет

6

Re: VBS: путь папок из даты

Zeon25 пишет:

видимо не очень то это и легко, раз никто не пишет

Нахаляву - да.

( 2 * b ) || ! ( 2 * b )

7

Re: VBS: путь папок из даты

Zeon25 пишет:

видимо не очень то это и легко, раз никто не пишет

Как раз наоборот. Ориентация форума — помощь страждущим научиться писать, а не писать за них. Другое дело, если проблема сложная, интересная — она тут же обрастает участниками, кодом, обсуждением и т.д.

OFF:

Rumata пишет:

Нахаляву - да.

Ну, не столько на халяву… Желающих писать повседневный код (а случай Zeon25 как раз из тех, которые, с едва отличающимися вариациями, появляются на форуме чуть ли не каждый день) за кого-то находится мало. Да и люди банально устают писать одно и то же. Было обсуждение в OFF-форуме, и очень хорошо выразился YMP в закрытом форуме для модераторов.

Можно написать? Можно. Какой-либо смысл есть в этом? Нет. Ибо так мы и сами не получаем никаких новых знаний, и обратившегося с подобной просьбой сие тоже ровным счётом ничему не научит. Одно дело, когда человек, даже ничего не зная, что-то пытается делать, пишет, что, вот, мол, делал так, делал этак — не получается. Тогда можно и написать, и подсказать, потому как какой-то смысл, цель уже появляется. А иначе… Только ждать, что, может быть, кто-нибудь от скуки напишет.

8

Re: VBS: путь папок из даты

Направьте хоть на код с которого ковырять. Сам в свое время осваивал ХТМЛ и по примерам много чего делал. По логике вещей понимаю что нужно объявить три переменных и присвоить каждой из них кусок обрезанной даты, так же понимаю что дату взять не проблема из примеров тут на сайте, не нашел как обрезать правда. Надеюсь все же на вашу помощь хотя бы направлением на путь истинный.

9

Re: VBS: путь папок из даты

Надеюсь, Вы уже загрузили документацию, пройдясь по ссылкам, собранным в Windows Script Host: коллекция ссылок. Вам, скорее всего, потребуются функции Date(), Mid(), Left(), Right(), CStr(), DateDiff(), DateAdd().

Например, вчерашний день:

WScript.Echo DateAdd("d", -1, Date())

Получить части даты: Year(), Month(), Day(). Если у Вас хранение документов организовано с ведущим нулём в датах, то:

WScript.Echo Right("00" & CStr(Day(Date())), 2)

даст ведущий нуль в однозначных днях.

10

Re: VBS: путь папок из даты

'Путь к файлам для добалвения в архив.
fldrpath= ("C:\Temp\" & Year(dtNow) & "\" & Month(dtNow) & "\"  )                     'ВОТ ТУТ  ПОПРАВИЛ
'Путь и имя файла лога.
'LogPath = (fldrpath & "1.txt")
'Скрипт для отправки сообщения пользователям и архивирования файла. 
filePath = (fldrpath & Day(dtNow)-1 & ".txt")                                                       'И ВОТ ТУТ

Немного не понял как с датой у которой нет ведущего нуля, у меня такие и есть и все равно файл с названием 9.txt забирается нормально.
alexii спасибо за помощь. весь код поправил сам, как вы и сказали надо просто подумать

11

Re: VBS: путь папок из даты

Zeon25 пишет:

Немного не понял как с датой у которой нет ведущего нуля

Вы писали:

C:\папка\2010\10\28.html

Как будет выглядеть у Вас 6 января? Если как «C:\папка\2010\1\6.html», то «Right(bla-bla-bla)» Вам не нужно. Если же как «C:\папка\2010\01\06.html», то добавление ведущего нуля посредством «Right(bla-bla-bla)» про Вас.

12

Re: VBS: путь папок из даты

спасибо, понял. для меня это актуально только для месяца, т.к. даты будут без нулей.