移动最旧的文件

时间:2016-03-14 10:35:02

标签: file vbscript

我一直在寻找一种方法将文件夹中最旧的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. 将文件移至其他位置。
  4. 但是,它不起作用,它会回显第一个文件的名称5次并且只移动这个名称。 我认为我应该将对象设置为Nothing以重新开始,但无济于事。

1 个答案:

答案 0 :(得分: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的值永远不会改变,因为即使在移动之后,与源文件夹中的文件相比,引用的文件仍然是最旧的文件。