文件(备份、日志、....)轮换器





4.00/5 (5投票s)
一个有用的脚本,用于清除旧的备份文件并为新文件腾出空间。
引言
本文介绍了一种从文件夹中删除旧备份或日志文件的方法,以防止浪费磁盘空间。
背景
作为系统管理员,您可能需要检查包含备份或日志文件的文件夹。您使用的任何备份方法都会生成多个文件,例如每日文件。如果您不定期清除这些文件夹,它们会在一段时间后填满您的磁盘空间。
应该有一种有效的方法来自动删除旧文件。像 Linux 这样的某些平台提供 Log Rotation 守护程序,它可以自动在特定时间删除文件并删除旧文件。由于 Windows 没有特定的方法来执行此操作,您应该修改脚本以生成单独的备份或日志文件,并使用我将要介绍的脚本来保留一定数量的新文件并删除较旧的文件。
Using the Code
假设您有一个包含多个文件的文件夹,并且想要保留例如四个最新的文件并删除其他文件。
如果文件夹包含以下文件
- log_20091101
- log_20091102
- log_20091103
- log_20091104
- log_20091105
- log_20091106
该脚本读取文件的最后修改日期并对其进行排序,然后删除较旧的文件
- log_20091105
- log_20091106
为此,请将此 VBScript 代码放在您的硬盘上的某个位置,并在与脚本相同的文件夹中创建一个批处理文件,该批处理文件运行此脚本。您需要使用 Windows 计划任务自动运行批处理文件。
'This scripts deletes the old files in the [Path] and keeps the [MaxFiles] files.
Path = WScript.Arguments.Item(0)
MaxFiles=WScript.Arguments.Item(1)
Set fs = WScript.CreateObject ("Scripting.FileSystemObject")
Set ContentFolder = fs.GetFolder(Path)
Set Files = ContentFolder.Files
Dim FileNames(100)
Dim ModifiedDates(100)
Dim TempDate
Dim TempName
Dim Count
Dim i
Dim j
Count = Files.Count
i=0
For Each File in Files
FileName = File.Name
ModifiedDate = File.DateLastModified
FileNames(i) = FileName
ModifiedDates(i) = ModifiedDate
i=i+1
Next
For i=0 to Count-1
For j=0 to i-1
If ModifiedDates(i) > ModifiedDates(j) Then
TempDate = ModifiedDates(i)
TempName = FileNames(i)
ModifiedDates(i) = ModifiedDates(j)
FileNames(i) = FileNames(j)
ModifiedDates(j) = TempDate
FileNames(j) = TempName
End If
Next
Next
For i=MaxFiles to Count-1
FullPath= Path & "\\" & FileNames(i)
fs.DeleteFile(FullPath)
Next
批处理文件将定期运行以删除您文件夹中的旧文件。
第一条命令在Your_Folder_1中保留五个最新的文件,第二条命令保留七个最新的文件并删除旧文件。
wscript Rotator.vbs Your_Folder_1 5
wscript Rotator.vbs Your_Folder_2 7
关注点
实际上,删除例如七天前的文件是一个坏主意。因为如果您的备份方法脚本在七天内未能运行,并且 Rotator 脚本每天运行,那么在七天后您将面临一个空文件夹,这并非理想的情况。
相反,保留七个新文件的想法即使备份方法失败也不会有风险。因此,七天后,至少您将保留旧备份,并且不会因为销毁数据而受到责备。因此,运行此脚本是完全安全的。