Vbscript - сравнивать и копировать файлы из папки, если они новее целевых файлов
Я пытаюсь разработать этот сценарий, который должен использоваться как часть сценария входа для многих пользователей. И этот сценарий, как правило, должен принимать исходную папку и папку назначения, поскольку в основном просто убедитесь, что папка назначения имеет точно такое же содержимое, что и исходная папка. Но копировать только в том случае, если метка даты изменения исходного файла новее, чем целевой файл.
Я продумывал этот базовый псевдокод, просто пытаясь убедиться, что он в действительности действителен и надежен.
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 ответа
Ваш алгоритм выглядит хорошо. На практике вам нужно получить файлы с помощью 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
Ваш код выглядит разумно. Просто обратите внимание на файлы только для чтения и тому подобное.
Вы можете использовать FileSystemObject
чтобы сделать реальные операции с файлами, просто посмотрите на:
http://msdn.microsoft.com/en-us/library/6kxy1a51%28VS.85%29.aspx