Копирование всех новых файлов, но последний раз измененных из местоположения A в местоположение B - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь создать сценарий VBScript для копирования каждые X минут файлов из местоположения A в местоположение B. Мои условия: скопировать все новые файлы (которых нет в целевой папке) и не копировать последниемодифицированный файл.Для этого я создал список, который сортирует все файлы по дате последнего изменения.

Я создал следующий скрипт:

Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim is_first
is_first = 1
Set list = CreateObject("ADOR.Recordset")
strOriginFolder = "C:\Users\Shelly\Desktop\test"
strDestinationFolder = "C:\Users\Shelly\Desktop\test2"
list.Fields.Append "name", 200, 255
list.Fields.Append "date", 7
list.Open

For Each f In objFSO.GetFolder(strOriginFolder).Files
    list.AddNew
    list("name").Value = f.Path
    list("date").Value = f.DateLastModified
    list.Update
Next
list.Sort = "date DESC"

list.MoveFirst
For Each objFile in objFSO.GetFolder(strOriginFolder).Files
    If is_first = 0 Then
        WScript.Echo list("date").Value & vbTab & list("name").Value
        WScript.Echo ("\n")
        WScript.Echo list("name").Value
        WScript.Echo ("\n")
        WScript.Echo objFile.Path
        If Not objFSO.FileExists(strDestinationFolder & "\" & list("name").Value) Then
            objFSO.CopyFile list("name").Value, strDestinationFolder & "\" &
            list("name").Value
        End If
    End If
    is_first = 0
    list.MoveNext
Next
list.Close

Теперь я знаю, что у меня проблема ссамая важная строка:

objFSO.CopyFile list("name").Value, strDestinationFolder & "\" & list("name").Value

Но я не знаю, как использовать objFSO.CopyFile с отсортированным списком.Печать от objFile.Path и WScript.Echo list("name").Value, конечно, отличается.

1 Ответ

0 голосов
/ 24 февраля 2019

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

Option Explicit

' Source and target folder configuration
Dim sourceFolderPath, targetFolderPath
    sourceFolderPath = ".\source"
    targetFolderPath = ".\target"

Dim targetFolder, testFile, newerFile, copyFile
    ' At the start there is not a new file nor a file to copy
    Set newerFile = Nothing 
    Set copyFile = Nothing 

    With WScript.CreateObject("Scripting.FileSystemObject")
        ' Get a full reference to target folder 
        targetFolder = .GetAbsolutePathName( targetFolderPath )
        ' Iterate over source file list
        For Each testFile In .GetFolder(.GetAbsolutePathName( sourceFolderPath )).Files
            ' Only process a file if it does not exist on target folder
            If Not .FileExists(.BuildPath( targetFolder, testFile.Name )) Then 
                If newerFile Is Nothing Then 
                    ' Is it the first file we see? Remember it as we still don't know 
                    ' if it is the newer one
                    Set newerFile = testFile 

                ElseIf testFile.DateLastModified > newerFile.DateLastModified Then 
                    ' We have found a file newer than the previously seen 
                    ' Select the previous one to copy and remember this new file
                    Set copyFile = newerFile
                    Set newerFile = testFile 

                Else 
                    ' Current file is not the newer one, copy it
                    Set copyFile = testFile 

                End If ' newerFile

                ' Is there a file to copy?
                If Not (copyFile Is Nothing) Then 
                    WScript.Echo "Copying " & copyFile.Path & " to " & .BuildPath( targetFolder, copyFile.Name ) 
                    copyFile.Copy .BuildPath( targetFolder, copyFile.Name )
                    Set copyFile = Nothing 
                End If ' copyFile

            End If ' FileExists
        Next ' testFile
    End With ' FileSystemObject
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...