it-swarm.cn

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

Windows命令行选项在删除(n)天之前的给定文件夹中的所有文件时,有什么好的Windows命令行选项?

另请注意,其中可能有成千上万个这样的文件,因此在这里将forfiles和Shell转换为cmd并不是一个好主意。除非您喜欢生成数千个命令shell。我认为这是一个令人讨厌的骇客,所以让我们看看我们能否做得更好!

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

31
Jeff Atwood

我四处张望了 找到了一个强力的方式

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

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

(删除-whatif使其实现)

44
Jeff Atwood

喜欢Jeff的PowerShell命令,但是对于没有PowerShell的Windows计算机的替代vbs解决方案,您可以尝试以下操作。

另存为 <filename>.vbs并执行:

<filename>.vbs <target_dir> <NoDaysSinceModified> [Action]

第三个参数[Action]是可选的。没有它,文件早于<NoDaysSinceModified>将被列出。将其设置为D,它将删除早于<NoDaysSinceModified>

示例

PurgeOldFiles.vbs "c:\Log Files" 8

将会列出c:\Log Files超过8天

PurgeOldFiles.vbs "c:\Log Files" 8 D

删除c:\Log Files超过8天

注意:这是 SQLServerCentral.com 上Haidong Ji脚本的修改版本。

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
7
PaulPlum

看看这个 http://sourceforge.net/projects/delold ,因为这是我使用的。

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

4
Ian Stewart

并不是真正的命令行,但是我喜欢使用 LINQPad 作为C#脚本宿主:
(这给了我一个命令行C#脚本Thingieà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);
4
Lucas

用cygwin(或其他替代方法)的“ find”命令可以实现类似的效果。但是,这将需要您安装cygwin或准备好便携式版本。

3
Moshe

我以前在powershell之前使用过的另一种选择:

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

2
JakeRobinson

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

2
DaffyDuc