删除比(x)天早的文件?

什么是一个很好的Windows命令行选项,用于删除(n)天以前的给定文件夹中的所有文件?

另外请注意,可能有成千上万的这些文件,因此forfilescmd的shell文件在这里不是一个好主意。除非你喜欢产生成千上万个命令shell。 我认为这是一个非常讨厌的黑客,所以让我们看看我们能做得更好!

理想情况下,内置于(或易于安装到)Windows Server 2008中的东西。

我环视了一下, 发现了一个PowerShell的方式 :

从指定文件夹中删除所有超过8天的文件(预览)

 dir |? {$_.CreationTime -lt (get-date).AddDays(-8)} | del -whatif 

(删除-whatif使之发生)

爱杰夫的PowerShell命令,但是对于没有PowerShell的Windows机器的替代vbs解决scheme,您可以尝试以下操作。

另存为(文件名).vbs并执行:
(filename).vbs(target_dir)(NoDaysSinceModified)(Action)

第三个参数(Action)是可选的。 没有它,比(NoDaysSinceModified)更早的文件将被列出。 如果设置为“D”,则会删除比(NoDaysSinceModified)更早的文件,

PurgeOldFiles.vbs“c:\ Log Files”8
列出超过8天的c:\ Log Files 中的所有文件

PurgeOldFiles.vbs“c:\ Log Files”8 D
删除大于8天的c:\ Log Files中的所有文件

注意:这是SQLServerCentral.com上海东基的脚本的一个修改版本

 Option Explicit on error resume next Dim oFSO Dim sDirectoryPath Dim oFolder Dim oFileCollection Dim oFile Dim iDaysOld Dim fAction sDirectoryPath = WScript.Arguments.Item(0) iDaysOld = WScript.Arguments.Item(1) fAction = WScript.Arguments.Item(2) Set oFSO = CreateObject("Scripting.FileSystemObject") set oFolder = oFSO.GetFolder(sDirectoryPath) set oFileCollection = oFolder.Files If UCase(fAction) = "D" Then 'Walk through each file in this folder collection. 'If it is older than iDaysOld, then delete it. For each oFile in oFileCollection If oFile.DateLastModified < (Date() - iDaysOld) Then oFile.Delete(True) End If Next else 'Displays Each file in the dir older than iDaysOld For each oFile in oFileCollection If oFile.DateLastModified < (Date() - iDaysOld) Then Wscript.Echo oFile.Name & " " & oFile.DateLastModified End If Next End If 'Clean up Set oFSO = Nothing Set oFolder = Nothing Set oFileCollection = Nothing Set oFile = Nothing Set fAction = Nothing 

不是真正的命令行,但我喜欢使用LINQPad作为C#脚本主机:
(这只是给了我一个命令行C#脚本thingieàla vbs文件的想法)

 var files = from f in Directory.GetFiles(@"D:\temp", "*.*", SearchOption.AllDirectories) where File.GetLastWriteTime(f) < DateTime.Today.AddDays(-8) select f; foreach(var f in files) File.Delete(f); 

看看这个http://sourceforge.net/projects/delold,因为这是我使用的&#x3002;

简单但有效。 delold -d 14删除当前文件夹中14天以前的文件。

用cygwin(或其他select)“find”命令可以实现类似的function。 但是这需要你安装cygwin或者手头有便携版本。

在PowerShell之前使用的另一种select:

http://lifehacker.com/133190/geek-to-live–hard-drive-janitor

我使用autoIT来完成这个在我的系统上。 我喜欢你可以编译.au3文件轻松地exe。 引入安全漏洞并不像任何人可以编辑的bat文件那样容易。