1

Тема: VBS:Проверка файлов по дате изменения, с копированием при совпадении

Доброго времени суток! Задача состоит в следующем: Есть папка с файлами, надо все файлы в папке сравнить с заданным значением по параметру "дата изменения", при совпадении "даты изменения" с заданным значением копировать файл в определённую папку. Загвоздка в организации цикла перебора всех файлов в папке! Сам в написании ещё нуб, прошу о помощи=)

Dim oFolder
Dim oFile
Dim partdate
Dim FSO
Dim sdate

copypath = "d:\1\datacopy" 'куда копировать
Set FSO = CreateObject("Scripting.FileSystemObject")
oFolder = "D:\1\data" 'папка исходная

'значение прошлого дня
partdate = Day(Date)-1
sdate = CStr(partdate & "." & Month(date) & "." & Year(Date))

For  each ofile in fso.GetFolder(oFolder).Files
'Проверка на соответствие дат
If sdate = CStr(ofile.datelastmodified) then
    fso.copyfile ofile, copypath
    else
    wscript.echo "херас два!!"
end if
next

2

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

Так:

Dim oFolder
Dim oFile
Dim partdate
Dim FSO
Dim sdate

copypath = "d:\1\datacopy\" 'куда копировать
Set FSO = CreateObject("Scripting.FileSystemObject")
oFolder = "D:\1\data" 'папка исходная

'значение прошлого дня
partdate = Day(Date)-1
sdate = CStr(partdate & "." & Month(date) & "." & Year(Date))

For  each ofile in fso.GetFolder(oFolder).Files
'Проверка на соответствие дат
If sdate = CStr(ofile.datelastmodified) then
    fso.copyfile ofile.path, copypath
    else
    wscript.echo "херас два!!"
end if
next

3

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

Хммм, "CStr(ofile.datelastmodified)" по идее вернет не только дату изменения, но и время, т.е. надо бы взять только первые 10 символов, т.к. в "sdate" будет только дата..

WBR. Roman

4

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

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

5 (изменено: madjahed, 2012-11-18 17:26:11)

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

Попробуй этот - проверено, работает

' каталог, откуда копируем
InitialFolder = "C:\Documents and Settings\User\Рабочий стол\ActiveX desktop" 
' каталог, куда копируем
TargetFolder = "C:\Documents and Settings\User\Рабочий стол\1" 
' контрольная дата (копируем файлы с датой изменения позже этой)
ControlDate = CDate("17.11.2012") 

On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShellApp = CreateObject("Shell.Application")
LogPath = objFSO.GetParentFolderName(WScript.ScriptFullName)
Set LogStream = objFSO.OpenTextFile(LogPath & "\CopyLog.log", 8, True)
LogStream.WriteLine "Начало копирования " & Now()
CopyFiles InitialFolder
LogStream.WriteLine "Конец копирования: " & Now()
LogStream.Close
' процедура рекурсивно перебирает файлы в каталоге
Sub CopyFiles(FolderPath)
    On Error Resume Next
    Set objFolderItems = objShellApp.NameSpace(FolderPath).Items()
    For Each objFolderItem In objFolderItems
        If objFolderItem.IsFolder And LCase(Right(objFolderItem.Name, 4)) <> ".zip" Then
            CopyFiles objFolderItem.Path
        Else
            Set objFile = objFSO.GetFile(objFolderItem.Path)
                     If objFile.DateLastModified = ControlDate Then
                CopyFile objFolderItem.Path
            End If
        End If
    Next
End Sub
' процедура копирует файл
Sub CopyFile(FilePath)
    On Error Resume Next
    SubPath = Mid(FilePath, Len(InitialFolder) + 1)
    TargetPath = TargetFolder & SubPath
    FolderPath = objFSO.GetParentFolderName(TargetPath)
    If Not objFSO.FolderExists(FolderPath) Then
        CreateFolder FolderPath
    End If
    ' если у файла назначения есть атрибут ReadOnly, снимаем его
    If objFSO.FileExists(TargetPath) Then
        Set objFile = objFSO.GetFile(TargetPath)
        If objFile.Attributes And 1 Then
            objFile.Attributes = objFile.Attributes - 1
        End If
    End If
    objFSO.CopyFile FilePath, TargetPath, True
    If Err.Number <> 0 Then
        LogStream.WriteLine
        LogStream.WriteLine FilePath
        LogStream.WriteLine Err.Description
        LogStream.WriteLine
        Err.Clear
    Else
        LogStream.WriteLine TargetPath
    End If
End Sub
' процедура создаёт каталог
Sub CreateFolder (FolderPath)
    On Error Resume Next
    ParentFolder = objFSO.GetParentFolderName(FolderPath)
    If Not objFSO.FolderExists(ParentFolder) Then
        CreateFolder ParentFolder
    End If
    objFSO.CreateFolder FolderPath
End Sub

6

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

Спасибо, буду разбираться!

7

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

Ebamba, а что, собственно не устраивает в первоначальном варианте? Или рекурсия понадобилась?

8

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

В первоначальном варианте нет перебора(не работает) всех файлов

9

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

В том варианте, который предложен Вам во втором сообщении темы, перебор работает.
Если же у Вас появляется какое-то сообщение об ошибке, то выкладывайте сюда его полный текст.

10

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

И снова здравствуйте! Задача немного изменилась, суть в следующем- перебираем в папке все файлы, смотрим внутрь файла и ищем там определённое слово, если   слово есть, то копируем его в папку, если нет, то ничего не делаем! Загвоздка в следующем, поиск в файле нужного слова работает, но не работает копирование файла, хотя удаление по тому же условию работает, выдаёт "разрешение отклонено" ошибка в строке FSO.CopyFile! В чём я не прав в коде? Спасибо

Dim Folder,FilesCollection,x,TextStream,sFullFileName,i
path = "d:\1\post" 'исходная папка
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objRegExp = CreateObject("VBScript.RegExp")
Set Folder = FSO.GetFolder(path)
Set FilesCollection= Folder.Files
const ForReading = 1, TristateUseDefault = -2
For Each File In FilesCollection
    path1 = "d:\1"  'куда копировать
    sFullFileName = path & "\" & File.Name
    set F = FSO.GetFile(sFullFileName)
    set TextStream = F.OpenAsTextStream(ForReading,TristateUseDefault)
    objRegExp.Pattern = "ПОСТУПЛЕНИЕ" 'искомое слово в файле
    t = TextStream.ReadAll
    TextStream.Close
    p = objRegExp.Test(t)
'MsgBox p
    if p = "Истина" then
        FSO.CopyFile f, path1
    end if
next

11

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

Ebamba, добавьте первой строкой:

Option Explicit

и затем начинайте отлавливать ошибки.

12 (изменено: Rom5, 2012-11-20 18:25:02)

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

F - уже файловый объект

set F = FSO.GetFile(sFullFileName)

а Вы дальше с ним работаете как будто бы это строка, указывающая полный путь к файлу

FSO.CopyFile f, path1

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


F.Copy "пути_и_имя_нового_файла" ''''' ,True - Overwrite existing target
'''' или так -- fso.CopyFile file1, file2
WBR. Roman

13

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

OFF: Что-то мне подсказывает, что objRegExp.Pattern = "СЕКРЕТНО"

14

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

Спасибо, поправил, заработало! В пути куда копировать ещё забыл поставить слэшик:)=) dab00 не не секретно, как-то само так получилось:)

15

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

Есть ли возможность к скрипту из 5 поста добавить настройку исключаемых из обработки каталогов? Вот фрагмент такого кода из другого скрипта:


'Подкаталоги ИСХОДНОГО каталога исключаемые из обработки
Dim ExclusionList(2)
With fso
    ExclusionList(0)= .BuildPath(fromDir, "_gsdata_")
    ExclusionList(1)= .BuildPath(fromDir, "indexZZZ")
    ExclusionList(2)= .BuildPath(fromDir, "Temp\temporaryFolder")
End With
'**********************************************

16

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

DD пишет:

Есть ли возможность к скрипту из 5 поста добавить настройку исключаемых из обработки каталогов?

DD, есть.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

17 (изменено: DD, 2017-11-24 17:29:16)

Re: VBS:Проверка файлов по дате изменения, с копированием при совпадении

Xameleon пишет:

DD, есть.

Пока не увижу — не поверю)).