Alle Dateien älter als 14Tage löschen

  • Hi Leute,

    mein Problem was ich z.Z. habe ist echt crazy, wie ich finde Oo
    Also ich will einen Ordner auswerten, in dem ich alle Logfiles älter als 14 Tage löschen lasse.
    Ich habs so versucht und weiss den Fehler einfach nicht:

    [autoit]


    #include <date.au3>
    #include <file.au3>
    #include <array.au3>

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

    $d_ListFiles = _FileListToArray("c:\testordner\", '*', 1)

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

    For $i = $D_ListFiles[0] to 1 step -1
    $d_Time = Filegettime($D_Listfiles[$i],1)
    IF @error then msgbox(0,"","ERROR") ; SPÄTER WEG
    msgbox(0,"",$D_LISTFILES[$i]) ; SPÄTER WEG
    _Arraydisplay($d_Time) ; SPÄTER WEG
    If Stringinstr($D_ListFiles[$i],".log") <> 0 and _DateDiff("D",$d_Time[0] & "/" & $D_Time[1] & "/" & $d_time[2],_NowCalcDate()) > 13 Then
    Filedelete($D_ListFiles[$i])
    msgbox(0,"","Deleted file:" & $D_ListFiles[$i]) ; SPÄTER WEG
    EndIf
    Next

    [/autoit]

    Überall wo hinten dran steht ;SPÄTER WEG ist nur zum debuggen gedacht.
    Da beim debuggen gibt er mir nämlich oft sinnlose errors obwohl überhaupt nichts falsch läuft, und sobald dann mal eine logfile gefunden wurde mit der Endung .log kommt auch schon ein Error. Subscript used with non array variable, dabei ist $d_Time ja ein Array, Oo.
    Bei Arraydisplay ist das array auch korrekt.

    Ich weiss echt nicht was ich falsch mache :( Vielleicht weiss ja einer von euch bescheid.

    LG qon

  • hi,

    ich hatte auch schon mal das Problem.

    Spoiler anzeigen
    [autoit]

    #include "string.au3"
    #include "Date.au3"
    #include "file.au3"
    #include "Array.au3"
    ;
    $folder = "D:\Transfer";Pfad zum Ordner
    ;
    $dateminustwoweeks = _DateAdd('w', -4, _NowCalcDate()) ; jetztiges Datum - x- Wochen
    $dateminustwoweeks = StringReplace($dateminustwoweeks, "/", "") ; macht ne Zahl daraus
    ;
    $AllFilesinDir = _FileListToArray($folder & "\", "*.*", 1) ; Files werden in ein Array geschrieben
    ;
    If Not IsArray($AllFilesinDir) Then Exit MsgBox(16, "Löschtool by Thomas B", "Nichts gefunden.. EXIT!", 10)
    ;
    For $i = 1 To $AllFilesinDir[0] ; Schleife für alle Dateien im Ordner
    ;$filedate = FileGetTime($AllFilesinDir[$i], 0, 0) ; liest das Dateidatum aus
    $filedate = FileGetTime($folder & "\" & $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($folder & "\" & $AllFilesinDir[$i]) ; löschen der Dateien mit dem Datum
    Next

    [/autoit]

    versuch es bei mir läuft es super

    ThomasB

    MFG ThomasB

    *
    Ich lese viel und gerne (und wenn ich alle Mahnungen durch habe, schmeiße ich sie weg)
    *

    • Offizieller Beitrag

    Hi, nur nicht so kompliziert. :)

    Folgende Fehler:
    - Keine Pfadangabe bei FileGettIme
    - falsches Ausgabeformat bei FileGetTime

    So wirds was:

    [autoit]

    #include <file.au3>
    #include <date.au3>
    $path = "c:\testordner"
    $d_ListFiles = _FileListToArray($path, '*.log', 1)

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

    For $i = 1 to UBound($D_ListFiles) -1
    $d_Time = Filegettime($path & '\' & $D_Listfiles[$i],1,1)
    If _DateDiff("d",$d_Time,_NowCalcDate()) > 13 Then
    Filedelete($D_ListFiles[$i])
    EndIf
    Next

    [/autoit]
  • Vielleicht liegt es daran, das du 2 verschieden geschriebenen Variablen nutzt? Habe irgendwo gelesen das AutoIt die Groß und klein schreibung bei den Variablen als verschiedene Variablen ansieht?!?!

    Du hast einmal "$d_ListFiles" und einmal "$D_ListFiles" genutzt.

    Grüßle AlkoholiX

    • Offizieller Beitrag
    Zitat

    Habe irgendwo gelesen das AutoIt die Groß und klein schreibung bei den Variablen als verschiedene Variablen ansieht?!?!


    Definitiv NEIN.
    $Var = $var = $VAr = $vAr = $vaR ....

    Teste es einfach, weise einer Variablen einen Wert zu, und gib ihn mit gleichem Namen, aber anderer Schreibweise aus. Null Problemo :)

  • War das Vielleicht in einer älteren Version so? Weil ausgedacht habe ich mir das bestimmt nicht.... ?(

    Grüßle AlkoholiX

  • Also bei Batch ist das so, deswegen bin ich auch bei AutoIt davon ausgegangen ?(

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • Hi,

    danke für eure ganzen Antworten!
    Bugfix's Lösung gefällt mir jetzt am besten weil sie am nächsten an meiner war und kurz ist *g*
    Nur eins versteh ich nicht, warum falsches Ausgabeformat bei Time?

    mfG qon

  • hi,

    ich bin mal so frei und korrigiere das progrämmchen von bugfix.

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    #include <date.au3>
    $path = "c:\testordner"
    $d_ListFiles = _FileListToArray($path, '*.log', 1)

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

    For $i = 1 to UBound($D_ListFiles) -1
    $d_Time = Filegettime($path & '\' & $D_Listfiles[$i],1,1)
    $d_Time = StringLeft($d_Time,4)&"/"&StringMid($d_Time,5,2)&"/"&StringMid($d_Time,7,2)
    If _DateDiff("d",$d_Time,_NowCalcDate()) > 13 Then
    Filedelete($D_ListFiles[$i])
    EndIf
    Next

    [/autoit]

    grund:
    bei der func "_DateDiff" ist für das datum ein bestimmtes format erforderlich. --> yyyy/mm/dd

    gruss exberliner

  • Danke Exberliner! so wie dus gemacht hattest hatte ichs auch versucht nur hatte vergessen das bei dem array listfiles ja keine pfadangabe dabei ist die für filegettime gebraucht wird ;) ;)
    thx

    edit: hattet beide trotzdem noch n Fehler, den ihr aber von mir übernommen hattet ^^

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    #include <date.au3>
    $path = @systemdir & "\1088"

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

    $d_ListFiles = _FileListToArray($path, '*.log', 1)
    For $i = 1 to UBound($D_ListFiles) -1
    $d_Time = Filegettime($path & '\' & $D_Listfiles[$i],1,1)
    $d_Time = StringLeft($d_Time,4)&"/"&StringMid($d_Time,5,2)&"/"&StringMid($d_Time,7,2)
    If _DateDiff("d",$d_Time,_NowCalcDate()) > 13 Then
    Filedelete($path & "\" & $D_ListFiles[$i])
    EndIf
    Next

    [/autoit]

    Bei Filedelete muss natürlich auch der Pfad dabei

    edit BugFix: für dich doch immer ^^

    4 Mal editiert, zuletzt von qon (6. Januar 2008 um 17:29)