Löschen von Dateien

  • hallo,

    im forum wurde das schon behandelt. habe nun schon mal eine gui drum gebaut. nun stellen sich mir zwei fragen die ich nicht wirklich beantworten kann.

    mein ansatz

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <string.au3>
    #include <Date.au3>
    #include <file.au3>
    #include <Array.au3>

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

    GuiCreate("Serveraufräumen", 388, 149,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))

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

    $Group_1 = GuiCtrlCreateGroup("Löschung", 10, 10, 370, 100)
    $Button_2 = GuiCtrlCreateButton("...", 340, 40, 30, 20)
    $Button_3 = GuiCtrlCreateButton("Abbruch", 280, 120, 100, 20)
    $Button_4 = GuiCtrlCreateButton("Start", 170, 120, 100, 20)
    $Input_5 = GuiCtrlCreateInput("", 140, 40, 190, 20)
    $Label_6 = GuiCtrlCreateLabel("Inhalt des Ordners", 20, 40, 110, 20)
    $Date_7 = GuiCtrlCreateDate("Date7", 140, 70, 230, 20)
    $Label_8 = GuiCtrlCreateLabel("Datum", 20, 70, 100, 20)

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

    GuiSetState()
    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button_3
    ExitLoop
    Case $msg = $Button_2
    $folder = FileSelectFolder("Choose a folder.", "")
    GUICtrlSetData($Input_5,$folder,$folder)
    Case $msg = $Button_4
    _Start()
    ;;;
    EndSelect
    WEnd
    Exit
    #endregion --- GuiBuilder generated code End ---
    ;
    Func _Start()
    $iWeekday = _DateToDayOfWeek (@YEAR, @MON, @MDAY)
    $dateminustwoweeks = _DateAdd( 'w',-2, _NowCalcDate()) ; jetztiges Datum - 2 Wochen
    $dateminustwoweeks = StringReplace($dateminustwoweeks, "/", "") ; macht ne Zahl daraus
    ;$dir = _FileListToArray($folder, '*.*')
    $AllFilesinDir = _FileListToArray($folder & "\", "*.*") ; 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($folder & "\" & $AllFilesinDir[$i]) ; löschen der Dateien mit dem Datum
    Next
    _ArrayDisplay($AllFilesinDir,"test")
    MsgBox(0,"Anzahl der Daten in "&$folder,$AllFilesinDir[0])
    EndFunc

    [/autoit]

    mein fehlermeldung

    Spoiler anzeigen
    [autoit]

    C:\Programme\AutoIt3\Include\neueGUI.au3 (45) : ==> Subscript used with non-Array variable.:
    $filedateformat = $filedate[0]&$filedate[1]&$filedate[2]
    $filedateformat = $filedate^ ERROR

    [/autoit]


    frage 1
    in der ersten for schleife habe ich das filedateformat auskommentiert bis dahin läuft das script dann endet es. wo habe ich eine fehler bzw mache ich was falsch?
    das orginal aus dem forum

    Spoiler anzeigen
    [autoit]

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

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

    $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]

    meine zweite frage da in der gui schon ein kalender vorgesehen ist wollte ich fragen ob es möglich ist das datum so zu wählen und dann das zu löschen was länger nicht geändert wurde.

    mfg
    thomas

    MFG ThomasB

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

  • Hi Thomasb,
    wenn du in der folgende Zeile

    [autoit]

    $filedate = FileGetTime($folder &"\" &$AllFilesinDir[$i], 0, 0) ; liest das Dateidatum aus

    [/autoit]

    einen Unterschied zu deiner Zeile siehst, dann solltest du meine Zeile mal probieren,
    denn sie fügt dem Dateinamen auch den Pfad hinzu, und dann klappts auch mit FileGetTime()
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..

    2 Mal editiert, zuletzt von ytwinky (22. Februar 2007 um 21:35)