可能重复:
批处理文件删除超过 N 天的文件
我想运行一个计划的 Windows 任务,该任务从一个超过 2 周的目录中删除所有文件。
原因是这些是填满我的服务器的 IIS 和 Tomcat 日志,但我想保留最新的日志以防我需要调查问题。
有谁知道一种简单的方法来做到这一点?
干杯
尼日
可能重复:
批处理文件删除超过 N 天的文件
我想运行一个计划的 Windows 任务,该任务从一个超过 2 周的目录中删除所有文件。
原因是这些是填满我的服务器的 IIS 和 Tomcat 日志,但我想保留最新的日志以防我需要调查问题。
有谁知道一种简单的方法来做到这一点?
干杯
尼日
确切的语法: FORFILES /p d:\new /d -30 /m * /c "cmd /c del @file"
安排一个批处理文件来处理这个问题。
此行将删除 c:\mydirectory 中所有超过 14 天的文件 (*.*):
FORFILES -pc:\mydirectory -s -m*.* -d-14 -c"DEL @FILE"
将它放在一个文本文件中,将其重命名为“deletefiles.bat”之类的名称并安排它。
我没有对此进行测试,但应该很容易尝试。
编辑:如果您使用它,请确保您了解正在发生的事情 - -s 标志告诉它递归子目录,这可能不是您想要发生的事情。此外,您可能还需要为 DEL 命令指定一些标志。:)
编辑:意识到您需要从 Microsoft 下载东西才能使 FORFILES 工作。我也喜欢公认的解决方案,因为你不必有什么特别的。唯一的问题是它只每两周发生一次,而不是每天运行一个进程来删除所有超过 14 天的东西。这值多少钱。:P
最简单的方法是每周或每月运行一个 .bat 运行文件。
cd \mylog\dir
mkdir archive
del /Q .\archive\*.log
move *.log .\archive
如果您想要更复杂的东西,请下载 cygwin 工具以使用类似 un*x 的命令,或者可能查看 Powershell。
使用 VBScript,改编自ScriptingAnswers
Dim fso, startFolder, OlderThanDate
Set fso = CreateObject("Scripting.FileSystemObject")
startFolder = "E:\temp" ' folder to start deleting (subfolders will also be cleaned)
OlderThanDate = DateAdd("d", -07, Date) ' 07 days (adjust as necessary)
DeleteOldFiles startFolder, OlderThanDate
Function DeleteOldFiles(folderName, BeforeDate)
Dim folder, file, fileCollection, folderCollection, subFolder
Set folder = fso.GetFolder(folderName)
Set fileCollection = folder.Files
For Each file In fileCollection
If file.DateLastModified < BeforeDate Then
' fso.DeleteFile(file.Path) # Modify this to delete after testing
WScript.StdOut.WriteLine (file.Path)
End If
Next
Set folderCollection = folder.SubFolders
For Each subFolder In folderCollection
DeleteOldFiles subFolder.Path, BeforeDate
Next
End Function
您可以使用 CScript 运行此脚本
@Jason:不错的实用程序,资源工具包中的 FORFILES
为什么不编写批处理文件或 powershell 脚本并安排它呢?
用于删除早于指定日期的文件的脚本。
如果您在服务器上安装了 perl(或类似的),这是相当简单的:
#!perl
foreach my $file (</path/to/logs/*.log>) {
next unless -M $file > 14;
print "Deleting $file...\n";
# unlink $file or die "Failed to remove $file: $!";
}
实际删除的行被注释掉了,因为房子里可能有孩子:)