Ordner nach Anzahl löschen

    • Offizieller Beitrag

    Befinden sich in dem Ordner nur die Backup-Ordner (Voll- und Inkrementell)?

    Dann könnte man einen Vergleich (Kleiner als) machen:

    [autoit]


    #include <Array.au3>
    #Include <File.au3>
    $aFolderFull = _FileListToArray(@ScriptDir, '*_Voll', 2)
    $aFolderAll = _FileListToArray(@ScriptDir, '*', 2)
    If $aFolderFull[0] > 5 Then
    $tmp = StringLeft($aFolderFull[$aFolderFull[0]-4], 16)
    For $i = 1 To $aFolderFull[0] - 5
    For $j = 1 To $aFolderAll[0]
    If StringLeft($aFolderAll[$j], 16) < $tmp Then
    ;~ DirRemove(@ScriptDir & '\' & $aFolderAll[$j], 1)
    ConsoleWrite(@ScriptDir & '\' & $aFolderAll[$j] & @CRLF)
    EndIf
    Next
    Next
    Else
    MsgBox(0, 0, 'zu wenig Voll-Backups')
    EndIf

    [/autoit]

    Zum testen wieder erstmal den DirRemove-Befehl auskommentiert.

  • Hallo Oscar,


    in dem Ordner befindet sich auserdem noch ein LOG Ordner in dem die Backuplogs abgelegt werden.

    Und nach dem ich jetzt so lange nach dem Problem gesucht habe bis ich auf die reine Datumabfrage gestoßen bin, habe ich einen Debugger für AutoIT installiert und dieser hat auch einen Debug Ordner im Backupordner angelegt.

    Ich will damit sagen, es könnte schon sein, das dort noch mehr Ordner entstehen.

    Ich will aber nur die Voll- und die dazugehörigen Inkr.Backup Ordner nach einer bestimmten Anzahl löschen.

    Der Rest sollte schon bleiben.


    Ich probier jetzt erst einmal Dein Script aus.


    Herzlichen Dank.


    Beste Grüße.


    Hans

    • Offizieller Beitrag

    Da die Backup-Ordner alle mit einer Zahl anfangen wird es nur kritisch, wenn sich in dem Ordner auch Ordner befinden, die ebenfalls mit einer Zahl anfangen (die kleiner ist als die Zahl der Backup-Ordner).

    Im letzten Script wähle ich einfach den 5-letzten Voll-Backup-Ordner aus und lösche alle Ordner die "kleiner" sind (also ein älteres Datum haben).

  • hmm, welchen Wert muss ich da denn verkleinern wenn ich z.B. nur drei vorhalten will?

    Habe jetzt schon alles erdenkliche probiert aber es bleiben immer fünf Ordner übrig.

    Ich wollte da dann eine Variable einsetzen die aus einer INI gelesen wird und man so die Vorhalteanzahl über die INI bestimmen kann. Das auslesen der INI habe ich auch schon fertig.

    Bezüglich der Ordner die noch drin sind, könnte ich da nicht um alles noch eine Abfrage machen wie "if instr(_Voll) or instr(_Inkr) then"?

    Dann könnte auch ein Ordner mit "1" anfangen und würde nicht berührt?

    BG


    Hans

    • Offizieller Beitrag

    So, jetzt mit Auswahl und spezieller Abfrage, sodass auch wirklich nur die Backup-Ordner gelöscht werden:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #Include <File.au3>
    $aFolderFull = _FileListToArray(@ScriptDir, '*_Voll', 2)
    $aFolderAll = _FileListToArray(@ScriptDir, '*', 2)
    $iFullCount = 5 ; Anzahl der Voll-Backups, die nicht gelöscht werden sollen
    If $aFolderFull[0] > $iFullCount Then
    $tmp = StringLeft($aFolderFull[$aFolderFull[0]-$iFullCount+1], 16)
    For $i = 1 To $aFolderFull[0] - $iFullCount
    For $j = 1 To $aFolderAll[0]
    If StringRegExp($aFolderAll[$j], '\A\d{4}\.\d{2}\.\d{2}_\d{2}\.\d{2}_.*') And (StringLeft($aFolderAll[$j], 16) < $tmp) Then
    ;~ DirRemove(@ScriptDir & '\' & $aFolderAll[$j], 1)
    ConsoleWrite(@ScriptDir & '\' & $aFolderAll[$j] & @CRLF)
    EndIf
    Next
    Next
    Else
    MsgBox(0, 0, 'zu wenig Voll-Backups')
    EndIf

    [/autoit]
  • also das mit dem "StringRegExp" ist ja unheimlich clever ;)


    Es funktioniert jetzt echt super.

    Aller herzlichsten Dank für Deine Hilfe.

    Damit Du auch die Früchte Deiner Arbeit siehst, hier einmal der ganze Code:


    [autoit]


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

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

    Dim $Full_BU_File
    Dim $Inkr_BU_File
    Dim $BackupFolder
    Dim $BackupCount ; Anzahl der Voll-Backups, die nicht gelöscht werden sollen

    INI_Read()
    Backup()

    Func INI_Read()

    $Settings = IniReadSection(@ScriptDir & "\RoboBackup.ini", "Einstellungen")

    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else

    For $i = 1 To $Settings[0][0]

    Select
    Case $Settings[$i][0] = "VollBU_Batch"
    $Full_BU_File = $Settings[$i][1]
    Case $Settings[$i][0] = "InkrementBU_Batch"
    $Inkr_BU_File = $Settings[$i][1]
    Case $Settings[$i][0] = "Backup_Ordner"
    $BackupFolder = $Settings[$i][1]
    Case $Settings[$i][0] = "Anzahl_Vorgehaltener_Backups"
    $BackupCount = $Settings[$i][1]
    EndSelect

    Next
    EndIf

    EndFunc

    Func Backup()

    GUICreate("RoboBackup", 190, 140)

    $Button_Full = GUICtrlCreateButton("Voll-Backup", 30, 10, 130)
    $Button_Inkr = GUICtrlCreateButton("Inkrementelles-Backup", 30, 40, 130)
    $Button_Del = GUICtrlCreateButton("Alte Backups Löschen", 30, 70, 130)
    $Button_End = GUICtrlCreateButton("Ende", 30, 100, 130)

    GUISetState(@SW_SHOW)

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button_Full
    Run($Full_BU_File)
    Case $msg = $Button_Inkr
    Run($Inkr_BU_File)
    Case $msg = $Button_Del
    BackupDelete()
    Case $msg = $Button_End
    Exit
    EndSelect
    WEnd
    EndFunc

    Func BackupDelete()

    $aFolderFull = _FileListToArray($BackupFolder, '*_Voll', 2)
    $aFolderAll = _FileListToArray($BackupFolder, '*', 2)

    If $aFolderFull[0] > $BackupCount Then
    $tmp = StringLeft($aFolderFull[$aFolderFull[0]-$BackupCount+1], 16)
    For $i = 1 To $aFolderFull[0] - $BackupCount
    For $j = 1 To $aFolderAll[0]
    If StringRegExp($aFolderAll[$j], '\A\d{4}\.\d{2}\.\d{2}_\d{2}\.\d{2}_.*') And (StringLeft($aFolderAll[$j], 16) < $tmp) Then
    DirRemove($BackupFolder & '\' & $aFolderAll[$j], 1)
    ConsoleWrite($BackupFolder & '\' & $aFolderAll[$j] & @CRLF)
    EndIf
    Next
    Next
    Else
    MsgBox(0, 0, 'zu wenig Voll-Backups')
    EndIf
    EndFunc

    Sleep(2000)

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


    Beste Grüße und vielen Dank noch einmal.


    Hans