2016-03-14 2 views
0

Я искал способ переместить 5 самых старых измененных файлов в папку в другую папку. я наткнулся на некоторые полезные фрагменты кода, и я изменил его к этому:Перемещение самых старых файлов

Dim files 
Dim startFolder 
Dim destinationFolder 
Dim oldestFile 
Dim file 
Dim FSO 
startFolder = "C:\logs\current" 
destinationFolder = "C:\logs\backup" 

Set FSO = CreateObject("Scripting.FileSystemObject") 
Set files = FSO.GetFolder(StartFolder).files 
Set oldFiles = CreateObject("System.Collections.ArrayList") 

If files.Count <= 5 Then 
    WScript.Quit 
End If 

For i = 0 To 4 
    Set files = FSO.GetFolder(StartFolder).files 
    Set oldFiles = Nothing 
    For Each file In files 
     If Not IsObject(oldestFile) Then 
      Set oldestFile = file 
     Else 
      If file.DateLastModified < oldestFile.DateLastModified Then 
       Set oldestFile = file 
      End If 
     End If 
    Next 
    WScript.Echo "OLDEST: " & oldestFile.Name 
    oldestFile.Move destinationFolder & "\" & oldestFile.Name 
Next 

В основном то, что он должен сделать, это:

  1. петля 5 раз,
  2. каждый раз цикл по файлам и назначьте старшее значение oldestFile,
  3. переместите файл в другое место.

Однако, это не работает, это повторяет имя первого файла 5 раз и перемещает только этот. Я думал, что должен установить объекты на Nothing, чтобы начать новый, но безрезультатно.

+0

Есть так много таких типов вопросов уже на [так] – Lankymart

ответ

1

Вам необходимо сбросить переменную oldestFile в начале (или конце) вашего цикла, а не на переменную oldFiles.

For i = 0 To 4 
    Set files = FSO.GetFolder(StartFolder).files 
    Set oldestFile = Nothing 
    For Each file In files 
     ... 
    Next 
    WScript.Echo "OLDEST: " & oldestFile.Name 
    oldestFile.Move destinationFolder & "\" & oldestFile.Name 
Next

В противном случае значение oldestFile никогда не изменится, потому что даже после перемещения ссылочного файл ramains самого старого файла по сравнению с файлами в исходной папке.

Смежные вопросы