756 Stimmen

Batch-Datei zum Löschen von Dateien, die älter als N Tage sind

Ich suche nach einer Möglichkeit, alle Dateien, die älter als 7 Tage sind, in einer Batch-Datei zu löschen. Ich habe mich im Internet umgesehen und einige Beispiele mit Hunderten von Codezeilen gefunden, andere wiederum erforderten die Installation zusätzlicher Befehlszeilenprogramme, um die Aufgabe zu bewältigen.

Ähnliche Dinge können sein durchgeführt in BASH in nur ein paar Zeilen Code. Es sieht so aus, als ob man für Batchdateien in Windows etwas zumindest annähernd Einfaches tun könnte. Ich suche nach einer Lösung, die in einer Standard-Windows-Eingabeaufforderung funktioniert, ohne zusätzliche Dienstprogramme. Bitte auch keine PowerShell oder Cygwin.

8 Stimmen

Jeff Atwood hat diese Frage auf Serverfault beantwortet, und ich denke, sie sollte hier dokumentiert werden. serverfault.com/questions/49614/delete-files-older-than-x-days

0 Stimmen

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

1 Stimmen

gehrcke.de/zeitluecken wurde zu diesem Zweck entwickelt. Es ermöglicht sogar ein ausgeklügeltes Löschschema: Zusätzlich zur Aufbewahrung der Dateien der letzten 7 Tage kann z. B. auch jeweils eine Datei für die letzten 8 Wochen, 12 Monate und 2 Jahre aufbewahrt werden.

12voto

segero Punkte 121

Mein Befehl lautet

forfiles -p "d:\logs" -s -m*.log -d-15 -c"cmd /c del @PATH\@FILE" 

@PATH - ist in meinem Fall nur ein Pfad, also musste ich @PATH\@FILE

également forfiles /? funktioniert bei mir auch nicht, aber forfiles (ohne "?") funktionierte gut.

Und die einzige Frage, die ich habe: Wie kann man mehrere Masken hinzufügen (zum Beispiel " .log| .bak")?

All diese Informationen über forfiles.exe, die ich hier heruntergeladen (unter Win XP)

Wenn Sie jedoch einen Windows-Server verwenden, sollte forfiles.exe bereits vorhanden sein und sich von der ftp-Version unterscheiden. Aus diesem Grund sollte ich den Befehl ändern.

Für Windows Server 2003 verwende ich diesen Befehl:

forfiles -p "d:\Backup" -s -m *.log -d -15 -c "cmd /c del @PATH"

12voto

Viktor Ka Punkte 246

Für Windows 2012 R2 würde das Folgende funktionieren:

    forfiles /p "c:\FOLDERpath" /d -30 /c "cmd /c del @path"

um die zu löschenden Dateien zu sehen, verwenden Sie dies

    forfiles /p "c:\FOLDERpath" /d -30 /c "cmd /c echo @path @fdate"

1 Stimmen

Dies funktioniert sogar unter Windows Server 2008 und höher sowie unter Windows 7.

11voto

Miguel Carrillo Punkte 257

Alle Dateien löschen, die älter als 3 Tage sind

forfiles -p "C:\folder" -m *.* -d -3 -c "cmd  /c del /q @path"

Verzeichnisse löschen, die älter als 3 Tage sind

forfiles -p "C:\folder" -d -3 -c "cmd  /c IF @isdir == TRUE rd /S /Q @path"

10voto

NotJustClarkKent Punkte 1060

Für Windows Server 2008 R2:

forfiles /P c:\sql_backups\ /S /M *.sql /D -90 /C "cmd /c del @PATH"

Dadurch werden alle .sql Dateien, die älter sind als 90 Tage.

9voto

Paris Punkte 89

Kopieren Sie diesen Code und speichern Sie ihn als DelOldFiles.vbs .

ANWENDUNG IN CMD : cscript //nologo DelOldFiles.vbs 15

15 bedeutet, dass Dateien, die älter als 15 Tage sind, in der Vergangenheit gelöscht werden.

  'copy from here
    Function DeleteOlderFiles(whichfolder)
       Dim fso, f, f1, fc, n, ThresholdDate
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set f = fso.GetFolder(whichfolder)
       Set fc = f.Files
       Set objArgs = WScript.Arguments
       n = 0
       If objArgs.Count=0 Then
           howmuchdaysinpast = 0
       Else
           howmuchdaysinpast = -objArgs(0)
       End If
       ThresholdDate = DateAdd("d", howmuchdaysinpast, Date)   
       For Each f1 in fc
     If f1.DateLastModified<ThresholdDate Then
        Wscript.StdOut.WriteLine f1
        f1.Delete
        n = n + 1    
     End If
       Next
       Wscript.StdOut.WriteLine "Deleted " & n & " file(s)."
    End Function

    If Not WScript.FullName = WScript.Path & "\cscript.exe" Then
      WScript.Echo "USAGE ONLY IN COMMAND PROMPT: cscript DelOldFiles.vbs 15" & vbCrLf & "15 means to delete files older than 15 days in past."
      WScript.Quit 0   
    End If

    DeleteOlderFiles(".")
 'to here

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X