如何从Windows目录中删除旧文件,同时在Windows上保留最新的文件

可能重复:
文件删除N天以前的文件

我想运行一个计划的Windows任务,删除超过2周的目录中的所有文件。

原因是这些是填充我的服务器的IIS和Tomcat日志,但我想保留最近的日志,以防我需要调查一个问题。

有没有人知道一个简单的方法来做到这一点?

干杯

的NiGe

确切的语法: FORFILES /pd:\new /d -30 /m * /c "cmd /c del @file"

最简单的方法是每周或每月运行一次.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:很好用的工具,来自Resource Kit的FORFILES

安排一个批处理文件来处理这个。

该行将删除c:\ mydirectory中超过14天的所有文件(*。*):

 FORFILES -pc:\mydirectory -s -m*.* -d-14 -c"DEL @FILE" 

把它放在一个文本文件中,将其重命名为“deletefiles.bat”,并安排它。

我没有测试过,但应该很容易尝试。


编辑:如果你使用这个,确保你明白发生了什么 – 的标志告诉它递归的子目录,这可能不是你想要发生的。 另外,您也可能需要为DEL命令指定一些标志。 🙂


编辑:意识到你需要从微软下载的东西 ,以便FORFILES工作。 我也喜欢接受的解决方案,因为你不必有任何特别的东西。 唯一的问题是,它只发生每两个星期,而不是每天运行一个过程去除超过14天的所有东西。 为了什么是值得的。 :P

为什么不写一个批处理文件或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: $!"; } 

实际上删除的行被注释掉了,因为房子里可能有孩子:)