Dosyaları Sil (x) Günden Daha Eski?


31

Belirli bir klasördeki (n) günden daha eski olan tüm dosyaları silmek için iyi bir Windows komut satırı seçeneği nedir?

Ayrıca, bu binlerce dosya olabileceğine de dikkat edin, bu yüzden forfilesbir kabukla cmdburada iyi bir fikir olmaz .. binlerce komuta kabuğunu üretmek istemiyorsanız. Oldukça kötü bir saldırı olduğunu düşünüyorum, bakalım daha iyisini yapabilir miyiz!

İdeal olarak, Windows Server 2008 içine yerleşik (veya kolayca yüklenebilen) bir şey.


2
Sadece burada yayınlanan edilmiştir iç CMD.EXE'yi komutlarını kullanmak bir BAT dosyası merkezli yeni bir yöntem: stackoverflow.com/questions/9746778/...

Yanıtlar:


43

Etrafına biraz daha fazla baktım ve bir güç kaynağı buldum :

8 günden eski tüm dosyaları belirtilen klasörden silin (önizleme ile)

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

(bunu yapmak için -whatif öğesini kaldırın)


1
Onaylamak için bu, dosyaları kalıcı olarak siler mi yoksa geri dönüştürür mü?
TimS

Ops çok sert ezberlemek için !! i powershell seviyorum ama daha iyi bir yol kullanıldığını düşünüyorum Robocopy'nin
AminM

7

Jeff'in PowerShell komutunu seviyorum, ancak PowerShell olmayan Windows makineleri için alternatif bir vbs çözümü için aşağıdakileri deneyebilirsiniz.

Farklı kaydet <filename>.vbsve çalıştır:

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

Üçüncü parametre [Action]isteğe bağlıdır. O olmadan daha eski dosyalar <NoDaysSinceModified>listelenir. Onunla Deski dosyaları silmek gibi ayarlanmış<NoDaysSinceModified>

Örnek

PurgeOldFiles.vbs "c:\Log Files" 8

olacaktır listelemek tüm dosyaları c:\Log Filesdaha eski 8 günlükken

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

olacak silmek tüm dosyaları c:\Log Filesdaha eski 8 günlükken

Not: Bu, SQLServerCentral.com'daki Haidong Ji'nin senaryosunun değiştirilmiş bir versiyonudur.

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

Eski web sunucusu günlüklerini silmek için böyle bir şey kullanıyorum. Oldukça iyi çalıştı.
jeffspost

4

Komut satırı değil, fakat LINQPad'i C # komut dosyası sunucusu olarak kullanmaktan hoşlanıyorum :
(bu sadece bana C # komut dosyası özelliği hakkında bir komut dosyası için bir fikir verdi)

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);

Linq gerçekten harika, keşke PowerShell'e gelseydi.
Taylor Gibb,


3

Benzer bir şey cygwin'in (veya başka bir alternatif) "find" komutuyla başarılabilir. Ancak bu, cygwin'i kurmanızı veya taşınabilir versiyonunu elinizde bulundurmanızı gerektirir.



2

Bunu sistemimde gerçekleştirmek için autoIT kullanıyorum. Kolayca exe etmek için .au3 dosyalarını derleyebilmeyi seviyorum. Güvenlik açığı oluşturmak, herkesin düzenleyebileceği bir yarasa dosyası kadar kolay değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.