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.

3voto

Paulius Punkte 5699

Vielleicht gelingt Ihnen das ja. Sie können einen Blick werfen auf diese Frage für ein einfacheres Beispiel. Kompliziert wird es erst, wenn man die Daten vergleicht. Es mag einfach sein, festzustellen, ob das Datum größer ist oder nicht, aber es gibt viele Situationen, die zu berücksichtigen sind, wenn man tatsächlich die Differenz zwischen zwei Daten ermitteln muss.

Mit anderen Worten: Versuchen Sie nicht, dies zu erfinden, es sei denn, Sie können die Tools von Drittanbietern wirklich nicht verwenden.

1voto

Snickbrack Punkte 963

Das hier hat es mir angetan. Es funktioniert mit einem Datum und man kann die gewünschte Anzahl an Jahren subtrahieren, um in der Zeit zurück zu gehen:

@echo off

set m=%date:~-7,2%
set /A m
set dateYear=%date:~-4,4%
set /A dateYear -= 2
set DATE_DIR=%date:~-10,2%.%m%.%dateYear% 

forfiles /p "C:\your\path\here\" /s /m *.* /d -%DATE_DIR% /c "cmd /c del @path /F"

pause

el /F において cmd /c del @path /F erzwingt das Löschen einer bestimmten Datei, die in einigen Fällen schreibgeschützt sein kann.

el dateYear ist das Jahr Variable und dort können Sie den Subtrakt nach Ihren eigenen Bedürfnissen ändern

1voto

efdummy Punkte 664

Mein Skript zum Löschen von Dateien, die älter als ein bestimmtes Jahr sind:

@REM _______ GENERATE A CMD TO DELETE FILES OLDER THAN A GIVEN YEAR
@REM _______ (given in _olderthanyear variable)
@REM _______ (you must LOCALIZE the script depending on the dir cmd console output)
@REM _______ (we assume here the following line's format "11/06/2017  15:04            58 389 SpeechToText.zip")

@set _targetdir=c:\temp
@set _olderthanyear=2017

@set _outfile1="%temp%\deleteoldfiles.1.tmp.txt"
@set _outfile2="%temp%\deleteoldfiles.2.tmp.txt"

  @if not exist "%_targetdir%" (call :process_error 1 DIR_NOT_FOUND "%_targetdir%") & (goto :end)

:main
  @dir /a-d-h-s /s /b %_targetdir%\*>%_outfile1%
  @for /F "tokens=*" %%F in ('type %_outfile1%') do @call :process_file_path "%%F" %_outfile2%
  @goto :end

:end
  @rem ___ cleanup and exit
  @if exist %_outfile1% del %_outfile1%
  @if exist %_outfile2% del %_outfile2%
  @goto :eof

:process_file_path %1 %2
  @rem ___ get date info of the %1 file path
  @dir %1 | find "/" | find ":" > %2
  @for /F "tokens=*" %%L in ('type %2') do @call :process_line "%%L" %1
  @goto :eof

:process_line %1 %2
  @rem ___ generate a del command for each file older than %_olderthanyear%
  @set _var=%1
  @rem  LOCALIZE HERE (char-offset,string-length)
  @set _fileyear=%_var:~0,4%
  @set _fileyear=%_var:~7,4%
  @set _filepath=%2
  @if %_fileyear% LSS %_olderthanyear% echo @REM %_fileyear%
  @if %_fileyear% LSS %_olderthanyear% echo @del %_filepath%
  @goto :eof

:process_error %1 %2
  @echo RC=%1 MSG=%2 %3
  @goto :eof

0voto

npocmaka Punkte 52753

Eine flexiblere Möglichkeit ist die Verwendung von FileTimeFilterJS.bat :

@echo off

::::::::::::::::::::::
set "_DIR=C:\Users\npocmaka\Downloads"
set "_DAYS=-5"
::::::::::::::::::::::

for /f "tokens=* delims=" %%# in ('FileTimeFilterJS.bat  "%_DIR%" -dd %_DAYS%') do (
    echo deleting  "%%~f#"
    echo del /q /f "%%~f#"
)

Das Skript ermöglicht Ihnen die Verwendung von Maßeinheiten wie Tage, Minuten, Sekunden oder Stunden. Sie können wählen, ob Sie die Dateien nach dem Zeitpunkt der Erstellung, des Zugriffs oder der Änderung filtern möchten. Auflisten von Dateien vor oder nach einem bestimmten Datum (oder zwischen zwei Daten) Auswahl, ob Dateien oder Verzeichnisse (oder beides) angezeigt werden sollen Rekursiv sein oder nicht

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