我有一个VB脚本文件,通过特定的directopry路径中的许多文件和文件夹,并删除30天以前的任何文件
但是我想添加一个例外,以保留最后14个文件,所以如果我昨天没有任何新文件,那么今天它将删除14天之前的文件,我将留下13个文件 我想保留最后14个文件,无论它的年龄,但如果有超过14个文件,那么删除最旧的
任何人都可以帮助我在我的脚本中添加它,以及如何?这是我正在使用的脚本
On Error Resume Next
Set oFileSys = WScript.CreateObject("Scripting.FileSystemObject")
sRoot = "C:\Program Files (x86)\Syslogd\Logs" 'Path root to look for files
today = Date
nMaxFileAge = 14 'Files older than this (in days) will be deleted
DeleteFiles(sRoot)
Function DeleteFiles(ByVal sFolder)
Set oFolder = oFileSys.GetFolder(sFolder)
Set aFiles = oFolder.Files
Set aSubFolders = oFolder.SubFolders
For Each file in aFiles
dFileCreated = FormatDateTime(file.DateCreated, "2")
If DateDiff("d", dFileCreated, today) > nMaxFileAge Then
file.Delete(True)
End If
Next
For Each folder in aSubFolders
DeleteFiles(folder.Path)
Next
End Function
答案 0 :(得分:0)
我认为你可以通过几种方式做到这一点。一种方法是使用DIR
命令对文件进行排序,然后您可以迭代该列表并删除从第15位开始的列表。例如,此命令将仅返回文件名,按日期降序排序:
dir /o-d /a-d /b
您可以使用Shell.Run
或Shell.Exec
来捕获其输出。 "问题"使用Shell.Run
是您需要将输出发送到文件,然后打开文件并阅读它。没什么大不了但需要文件I / O.如果使用Shell.Exec
,则可以直接捕获标准输出,但只要运行DIR
命令,就必须处理命令提示符窗口闪烁。
如果您对其中任何一个"问题"都很好,那么该方法应该可以正常工作。
但你可以使用FileSystemObject
完成所有事情。关键是只获取第14个最新文件的日期。这是你怎么做到的。
' Only run if we actually have more than 14 files...
If oFolder.Files.Count > 14 Then
' Create an array to the hold the dates of each file in this folder...
ReDim a(oFolder.Files.Count - 1)
' Store the dates...
i = 0
For Each oFile In oFolder.Files
a(i) = oFile.DateLastModified ' Or use DateCreated, if you wish
i = i + 1
Next
' Sort the array...
Sort a
' Get the 14th most-recent date...
dtmCutOff = a(13)
' Iterate the files once more and delete any files older than our cut-off...
For Each oFile In oFolder.Files
If oFile.DateLastModified < dtmCutOff Then oFile.Delete
Next
End If
' Simple bubble sort...
Sub Sort(a)
For i = UBound(a) - 1 To 0 Step -1
For j = 0 To i
If a(j) > a(j + 1) Then
temp = a(j + 1)
a(j + 1) = a(j)
a(j) = temp
End If
Next
Next
End Sub
我认为你唯一的问题是,如果完全相同的日期和时间的两个文件占据第14个位置。使用此方法,脚本将保留两者,并且您最终会得到15个文件(或更多,如果有更多匹配项)。但无论您使用何种方法,这都会成为一个问题。如果您最近的20个文件具有相同的日期和时间,那么您如何从这20个文件中选择14来保留? =)