我一直在寻找一种方法将文件夹中最旧的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
基本上它应该做的是:
oldestFile
,但是,它不起作用,它会回显第一个文件的名称5次并且只移动这个名称。
我认为我应该将对象设置为Nothing
以重新开始,但无济于事。
答案 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
的值永远不会改变,因为即使在移动之后,与源文件夹中的文件相比,引用的文件仍然是最旧的文件。