it-swarm-id.com

Hapus File yang Lebih Lama dari (x) Hari?

Apa pilihan baris perintah Windows yang baik untuk menghapus semua file dalam folder yang diberikan lebih dari (n) hari?

Perhatikan juga mungkin ada ribuan file-file ini, jadi forfiles dengan Shell to cmd bukan ide yang bagus di sini .. kecuali Anda suka memunculkan ribuan shell perintah. Saya menganggap itu peretasan yang cukup buruk, jadi mari kita lihat apakah kita bisa melakukan yang lebih baik!

Idealnya, sesuatu dibangun ke dalam (atau mudah diinstal ke dalam) Windows Server 2008.

31
Jeff Atwood

Saya melihat sekeliling sedikit lebih banyak dan menemukan cara PowerShell :

Hapus semua file yang berumur lebih dari 8 hari dari folder yang ditentukan (dengan pratinjau)

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

(hapus -whatif untuk mewujudkannya)

44
Jeff Atwood

Suka perintah Jeff PowerShell, tetapi untuk solusi vbs alternatif untuk mesin Windows tanpa PowerShell Anda bisa mencoba yang berikut ini.

Simpan sebagai <filename>.vbs dan jalankan:

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

Parameter ketiga, [Action] adalah opsional. Tanpanya file lebih tua dari <NoDaysSinceModified> akan dicantumkan. Dengan itu ditetapkan sebagai D itu akan menghapus file yang lebih lama dari <NoDaysSinceModified>

Contoh

PurgeOldFiles.vbs "c:\Log Files" 8

akan mendaftar semua file dalam c:\Log Files lebih tua dari 8 hari

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

akan menghapus semua file di c:\Log Files lebih tua dari 8 hari

catatan: ini adalah versi modifikasi dari skrip Haidong Ji di 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

Lihat ini http://sourceforge.net/projects/delold karena ini yang saya gunakan.

sederhana tetapi berhasil. delold -d 14 Menghapus file yang lebih lama yang 14 hari di folder saat ini.

4
Ian Stewart

Tidak benar-benar baris perintah, tapi saya suka menggunakan LINQPad sebagai host skrip C #:
(yang baru saja memberi saya ide untuk baris perintah C # scripting thingie à la vbs file)

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

Hal serupa dapat dicapai dengan perintah "find" cygwin (atau alternatif lain). Tetapi ini mengharuskan Anda untuk menginstal cygwin atau memiliki versi portabel.

3
Moshe

Alternatif lain yang saya gunakan sebelum PowerShell:

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

2
JakeRobinson

Saya menggunakan autoIT untuk mencapai ini pada sistem saya. Saya suka bahwa Anda dapat mengkompilasi file .au3 dengan mudah. Tidak mudah untuk memperkenalkan kelemahan keamanan seperti halnya dengan file bat yang dapat diedit siapa pun.

2
DaffyDuc