Vbscript - сравнивать и копировать файлы из папки, если они новее целевых файлов - PullRequest
2 голосов
/ 14 мая 2010

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

Я размышлял над этим базовым псевдокодом, просто пытаясь убедиться, что он в принципе действителен и надежен.

Dim strSourceFolder, strDestFolder
strSourceFolder = "C:\Users\User\SourceFolder\"
strDestFolder = "C:\Users\User\DestFolder\"

For each file in StrSourceFolder
     ReplaceIfNewer (file, strDestFolder)
Next

Sub ReplaceIfNewer (SourceFile, DestFolder)

    Dim DateModifiedSourceFile, DateModifiedDestFile
    DateModifiedSourceFile = SourceFile.DateModified()
    DateModifiedDestFile = DestFolder & "\" & SourceFile.DateModified()

    If DateModifiedSourceFile < DateModifiedDestFile
        Copy SourceFile to SourceFolder
    End if

End Sub

Будет ли это работать? Я не совсем уверен, как это можно сделать, но, вероятно, я мог бы потратить весь день, чтобы понять это. Но люди здесь, как правило, настолько удивительно умны, что с вашей помощью это заняло бы гораздо меньше времени:)

Ответы [ 2 ]

2 голосов
/ 14 мая 2010

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

Слегка измененные примеры из DevGuru :

Dim filesys,demofile, date1, date2
Set filesys = CreateObject("Scripting.FileSystemObject")
Set demofile = filesys.GetFile("filename1")
date1 = demofile.DateLastModified
demofile = filesys.GetFile("filename2")
date2 = demofile.DateLastModified

If DateDiff("d", date1, date2) > 0 Then
    'date2 is more recent than date1, comparison by "day" ' ** Improvement **
End If

Редактировать: URL с ошибкой.


Улучшение В комментарии «date1» и «date2» были заменены. Документ MSDN гласит: Если date1 ссылается на более позднее время, чем date2, функция DateDiff возвращает отрицательное число. http://msdn.microsoft.com/en-us/library/xhtyw595(v=vs.84).aspx

1 голос
/ 14 мая 2010

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

Вы можете использовать FileSystemObject для выполнения фактических операций с файлами, просто посмотрите:

http://msdn.microsoft.com/en-us/library/6kxy1a51%28VS.85%29.aspx

...