it-swarm-tr.com

(X) Günden Daha Eski Dosyalar Silinsin mi?

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

Ayrıca bu dosyaların binlerce olabileceğini unutmayın, bu yüzden forfiles bir Shell ile cmd burada çok iyi bir fikir değildir .. binlerce komut kabuğu oluşturmaktan hoşlanmadıkça. Ben oldukça kötü bir kesmek olduğunu düşünüyorum, bu yüzden daha iyi yapabiliriz bakalım!

İdeal olarak, Windows Server 2008'de yerleşik (veya kolayca kurulabilir) bir şey.

31
Jeff Atwood

Biraz daha etrafına baktım ve powershell yolu buldum :

Belirtilen klasörden 8 günden eski tüm dosyaları silin (önizlemeli)

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

(bunun için -whatif'i kaldırın)

44
Jeff Atwood

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

<filename>.vbs olarak kaydedin ve yürütün:

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

Üçüncü parametre, [Action] isteğe bağlıdır. Bu olmadan <NoDaysSinceModified>'den daha eski dosyalar listelenir. D olarak ayarlandığında <NoDaysSinceModified> 'den daha eski dosyaları silecektir

Örnek

PurgeOldFiles.vbs "c:\Log Files" 8

list ​​c:\Log Files içindeki tüm dosyalar 8 günden eski olacak

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

c:\Log Files içindeki 8 günden eski tüm dosyalar sil

not: Bu Haidong Ji komut dosyasının değiştirilmiş bir versiyonudur 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

Şuna bir bak http://sourceforge.net/projects/delold kullandığım şey bu.

basit ama çalışıyor. delold -d 14 Geçerli klasördeki 14 günden eski dosyaları siler.

4
Ian Stewart

Gerçekten komut satırı değil, ama LINQPad bir C # komut dosyası ana bilgisayar olarak kullanmayı seviyorum:
(bu sadece bir komut satırı C # komut dosyası için bana bir fikir verdi à la vbs dosyaları)

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

Benzer bir şey cygwin'in (veya diğer alternatif) "find" komutuyla elde edilebilir. Ancak bu, cygwin'i yüklemenizi veya taşınabilir sürümü elinizde bulundurmanızı gerektirir.

3
Moshe

Powershell'den önce kullandığım başka bir alternatif:

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

2
JakeRobinson

Bunu sistemimde gerçekleştirmek için autoIT kullanıyorum. Kolayca exa için .au3 dosyaları derleyebilirsiniz gibi. Herkesin düzenleyebileceği bir yarasa dosyasıyla olduğu gibi bir güvenlik açığını tanıtmak kolay değildir.

2
DaffyDuc