it-swarm-vi.tech

Xóa tập tin cũ hơn (x) ngày?

Tùy chọn dòng lệnh Windows nào tốt để xóa tất cả các tệp trong một thư mục đã cho cũ hơn (n) ngày?

Cũng lưu ý rằng có thể có hàng ngàn tệp này, vì vậy forfiles với Shell thành cmd không phải là một ý tưởng tuyệt vời ở đây .. trừ khi bạn thích sinh ra hàng ngàn vỏ lệnh. Tôi nghĩ rằng đó là một hack khá khó chịu, vì vậy hãy xem liệu chúng ta có thể làm tốt hơn không!

Lý tưởng nhất, một cái gì đó được tích hợp vào (hoặc có thể dễ dàng cài đặt vào) Windows Server 2008.

31
Jeff Atwood

Tôi nhìn xung quanh nhiều hơn một chút và tìm thấy một cách quyền hạn :

Xóa tất cả các tệp hơn 8 ngày tuổi khỏi thư mục được chỉ định (có bản xem trước)

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

(loại bỏ -whatif để làm cho nó xảy ra)

44
Jeff Atwood

Yêu lệnh PowerShell của Jeff, nhưng đối với giải pháp vbs thay thế cho các máy Windows không có PowerShell, bạn có thể thử cách sau.

Lưu thành <filename>.vbs và thực hiện:

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

Tham số thứ ba, [Action] Là tùy chọn. Không có nó, các tập tin cũ hơn <NoDaysSinceModified> sẽ được liệt kê. Với nó được đặt là D nó sẽ xóa các tệp cũ hơn <NoDaysSinceModified>

Ví dụ

PurgeOldFiles.vbs "c:\Log Files" 8

sẽ danh sách tất cả các tệp trong c:\Log Files lớn hơn 8 ngày tuổi

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

sẽ xóa tất cả các tệp trong c:\Log Files lớn hơn 8 ngày tuổi

lưu ý: đây là phiên bản sửa đổi của tập lệnh Haidong Ji trên 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
7
PaulPlum

Hãy xem cái này http://sourceforge.net/projects/delold vì đây là những gì tôi sử dụng.

đơn giản nhưng hoạt động. delold -d 14 Xóa các tệp cũ hơn 14 ngày trong thư mục hiện tại.

4
Ian Stewart

Không thực sự là dòng lệnh, nhưng tôi thích sử dụng LINQPad làm Máy chủ lưu trữ tập lệnh C #:
[.___.]

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

Một cái gì đó tương tự có thể đạt được với lệnh "tìm" của cygwin (hoặc thay thế khác). Nhưng điều này sẽ yêu cầu bạn cài đặt cygwin hoặc có sẵn phiên bản di động.

3
Moshe

Một cách khác tôi từng sử dụng trước powershell:

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

2
JakeRobinson

Tôi sử dụng autoIT để thực hiện điều này trên hệ thống của mình. Tôi thích rằng bạn có thể biên dịch các tập tin .au3 để exe dễ dàng. Không dễ để giới thiệu một lỗ hổng bảo mật như với một tập tin bat bất cứ ai cũng có thể chỉnh sửa.

2
DaffyDuc