Ältere Dateien löschen

  • Hallo

    Ich möchte gerne in "C:\\programme\casio\bilder" alle dateien
    löschen die älter sind als 14 Tage.
    Wie macht man so etwas am besten?

    Ich habe hier im Forum schon danach gesucht Habe aber
    nichts gefunden was mir richtig weiterhilft.

    (die Dateien sind nicht so aufgebaut: YYYYMMDD)

  • sind die dateien auch dann vor 14 tagen erstellt worden bzw. bearbeitet, sodass hinten im explorer das datum steht?

    es gibt dort 2 Möglichkeiten:
    einmal das Datum zu bekommen wann die Datei erstellt wurde oder wann das letzte mal auf sie zugegriffen wurde (AutoIt-Hilfe FTW!!!!111!!11)

    dan kannst du das mit

    [autoit]


    FileGetTime("blabla.jpg")
    _NowCalcDate

    [/autoit]

    halt vergleichen bzw. von dem einen Datum 14 Tage abziehen und dann vergleichen

    edit:

    Ich habe mal schnell ein Skript gebastelt das alle Dateien löscht die ein bestimmtes Datum haben. Nur weiß ich nicht wie ich das vom jetzigen Datum 14 Tage abziehen soll:

    [autoit]


    #include <Date.au3>
    #include <Array.au3>
    #include <File.au3>

    [/autoit][autoit][/autoit][autoit]

    Dim $nowdate

    [/autoit][autoit][/autoit][autoit]

    $nowdate = _NowCalcDate() ; liest das heutige Datum aus
    MsgBox(1,"Date", $nowdate) ; gibt es in einer Msgbox aus zum Test

    [/autoit][autoit][/autoit][autoit]

    $AllFilesinDir = _FileListToArray(@ScriptDir & "\", "*.*") ; Files werden in ein Array geschrieben
    For $i = 1 To $AllFilesinDir[0] ; Schleife für alle Dateien im Ordner
    $filedate = FileGetTime($AllFilesinDir[$i], 0, 0) ; liest das Dateidatum aus
    $filedateformat = $filedate[0]&$filedate[1]&$filedate[2] ; Formatierung
    If $filedateformat <> "20070119" then $AllFilesinDir[$i] &= "|" ; markieren der Dateien die nicht gelöscht werden sollen
    Next

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 TO $AllFilesinDir[0]
    If StringRight($AllFilesinDir[$i], 1) <> "|" Then FileDelete(@ScriptDir & "\" & $AllFilesinDir[$i]) ; löschen der Dateien mit dem Datum
    Next

    [/autoit][autoit][/autoit][autoit][/autoit]

    Einmal editiert, zuletzt von leviathan (22. Januar 2007 um 18:47)

  • Moins,

    Du könntest dir erstmal nen Zeitstempel vom aktuellen Datum besorgen:
    $timestamp = _DateDiff( 's',"1970/01/01 00:00:00",$date)
    dann die einzelnen Dateien durchlaufen und mit
    $timestamp2 = _DateDiff( 's',"1970/01/01 00:00:00",$currentFileDate)
    den Zeitstempel der aktuellen Datei ermitteln. Zu $timestamp2 rechnest Du dann 14Tage-in-Sekunden. Wenn das Ergebnis kleiner $timstamp ist, kann die Datei gelöscht werden.

  • Hi, die Zeitstempelfunktion von AutoIt ist natürlich genial. Parallel dazu gibt es die DOS-Funktion DIR /D zum Beispiel sortiert Liste nach Alter usw. Nur so nebenbei Gruss Jan

  • th meger wie würde dann die zeile aussehen, weil mich interessiert das nun auch?

    also so dass ich das vergleichen kann mit _DateAdd(first, bla) und das ich es auch in diese form wie ich oben verwendet hab bekomme ist wahrscheinlich nicht schwer

    Einmal editiert, zuletzt von leviathan (23. Januar 2007 um 17:34)

  • Das ist aus der Hilfedatei von AutoIt zu _DateAdd:

    [autoit]


    #include <Date.au3>

    [/autoit][autoit][/autoit][autoit]

    ; Add 5 days to today
    $sNewDate = _DateAdd( 'd',5, _NowCalcDate())
    MsgBox( 4096, "", "Today + 5 days:" & $sNewDate )

    [/autoit][autoit][/autoit][autoit]

    ; Subtract 2 weeks from today
    $sNewDate = _DateAdd( 'w',-2, _NowCalcDate())
    MsgBox( 4096, "", "Today minus 2 weeks: " & $sNewDate )

    [/autoit][autoit][/autoit][autoit]

    ; Add 15 minutes to current time
    $sNewDate = _DateAdd( 'n',15, _NowCalc())
    MsgBox( 4096, "", "Current time +15 minutes: " & $sNewDate )

    [/autoit][autoit][/autoit][autoit]

    ; Calculated eventlogdate which returns second since 1970/01/01 00:00:00
    $sNewDate = _DateAdd( 's',1087497645, "1970/01/01 00:00:00";)
    MsgBox( 4096, "", "Date: " & $sNewDate )

    [/autoit]
  • danke hab ich irgendwie übersehen hier ist mal ein Skript dafür:

    funktioniert habe es ausprobiert oder hast du es auch hinbekommen:

    [autoit]


    #include <Date.au3>
    #include <Array.au3>
    #include <File.au3>

    [/autoit][autoit][/autoit][autoit]

    $dateminustwoweeks = _DateAdd( 'w',-2, _NowCalcDate()) ; jetztiges Datum - 2 Wochen
    $dateminustwoweeks = StringReplace($dateminustwoweeks, "/", "") ; macht ne Zahl daraus

    [/autoit][autoit][/autoit][autoit]

    $AllFilesinDir = _FileListToArray(@ScriptDir & "\", "*.*") ; Files werden in ein Array geschrieben
    For $i = 1 To $AllFilesinDir[0] ; Schleife für alle Dateien im Ordner
    $filedate = FileGetTime($AllFilesinDir[$i], 0, 0) ; liest das Dateidatum aus
    $filedateformat = $filedate[0]&$filedate[1]&$filedate[2] ; Formatierung
    If $filedateformat > $dateminustwoweeks then $AllFilesinDir[$i] &= "|" ; markieren der Dateien die nicht gelöscht werden sollen
    Next

    For $i = 1 TO $AllFilesinDir[0]
    If StringRight($AllFilesinDir[$i], 1) <> "|" Then FileDelete(@ScriptDir & "\" & $AllFilesinDir[$i]) ; löschen der Dateien mit dem Datum
    Next

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]

    werd noch nen GUI basteln und einstellbare Zeit und Dateiendung

  • ich habe mich jetzt nochmal drangewagt und habe es jetzt auch hinbekommen :)

    besonders der letzte beitrag von leviathan hat mir richtig weitergeholfen
    danke an alle die mir dabei geholfen haben!!