Frage Dateien löschen, die älter als (x) Tage sind?


Was ist eine gute Windows-Befehlszeilenoption zum Löschen aller Dateien in einem bestimmten Ordner älter als (n) Tage?

Beachten Sie auch, dass es viele Tausende dieser Dateien gibt forfiles mit einer Schale zu cmd ist keine gute Idee hier .. es sei denn, Sie möchten Tausende von Kommandozeilen spawnen. Ich halte das für einen ziemlich bösen Hack, also schauen wir mal, ob wir es besser können!

Idealerweise ist etwas in Windows Server 2008 integriert (oder leicht zu installieren).


30
2017-08-04 05:30


Ursprung


Eine neue Methode, die auf einer .BAT-Datei basiert, die nur interne CMD.EXE-Befehle verwendet, wurde hier veröffentlicht: stackoverflow.com/questions/9746778/ ...


Antworten:


Ich schaute mich ein bisschen mehr um fand einen Powershell-Weg:

Löschen Sie alle Dateien, die älter als 8 Tage sind, aus dem angegebenen Ordner (mit Vorschau)

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

(Entferne das -whatif, um es zu ermöglichen)


42
2017-08-04 05:40



Um dies zu bestätigen, löscht das die Dateien dauerhaft oder recycelt sie? - TimS
Ops zu schwer zum Auswendiglernen !! Ich liebe Powershell, aber ich denke, besser Weg ist zu verwenden robocopy - AminM


Liebe Jeffs PowerShell-Befehl, aber für eine alternative Vbs-Lösung für Windows-Maschinen ohne PowerShell könnten Sie Folgendes versuchen.

Speichern als <filename>.vbs und führen aus:

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

Der dritte Parameter, [Action] es ist optional. Ohne es die Dateien älter als <NoDaysSinceModified> wird aufgelistet. Mit ihr eingestellt als D Es löscht Dateien älter als <NoDaysSinceModified>

Beispiel 

PurgeOldFiles.vbs "c:\Log Files" 8

werden Liste alle Dateien in c:\Log Files älter als 8 Tage alt

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

werden löschen alle Dateien in c:\Log Files älter als 8 Tage alt

Hinweis: Dies ist eine modifizierte Version von Haidong Ji's Skript auf 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

6
2017-08-04 12:10



Ich verwende so etwas, um alte Webserver-Logs zu löschen. Hat gut geklappt. - jeffspost


Nicht wirklich Befehlszeile, aber ich mag es zu verwenden LINQPad als C # -Scripting-Host:
(Das gab mir nur eine Idee für eine Befehlszeile C # Scripting Thingie à la Vbs-Dateien)

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

3
2017-08-05 14:26



Linq ist wirklich großartig, ich wünschte, das würde PowerShell bringen. - Taylor Gibb


Guck dir das an http://sourceforge.net/projects/delold als das ist was ich benutze.

einfach aber funktioniert. delold -d 14 Löscht Dateien, die älter als 14 Tage im aktuellen Ordner sind.


3
2017-08-06 21:29





Etwas Ähnliches kann mit Cygwins (oder einer anderen Alternative) "Finden" -Befehl erreicht werden. Dafür müssten Sie jedoch Cygwin installieren oder die portable Version zur Hand haben.


2
2017-08-04 08:00





Eine andere Alternative, die ich vor der Powershell verwendet habe:

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


1
2017-08-05 04:44





Ich verwende autoIT, um dies auf meinen Systemen zu erreichen. Ich mag es, dass Sie .au3-Dateien einfach kompilieren können. Nicht so einfach, eine Sicherheitslücke einzuführen, wie es mit einer Fledermaus-Datei ist, die jeder bearbeiten kann.


1
2018-03-17 05:46