backup mit ordner erstellung

  • hallo,

    folgendes problem wo ich grad haenge:

    ich habe ein backupscript, das laeuft auch ganz fein.
    nun will ich das erweitern, es sollte die files tageweise speichern in ordnern.

    so stelle ich mir es vor:

    ich habe lauter *.txt files die im laufe des tages erstellt werden
    diese sollen nun wo anders gespeichert werden und da soll sich gleich ein ordner mit dem datum zb 12/12/2006 anlegen in diesem die files gespeichert werden.

    wie stelle ich das am besten an?

    danke fuer jede hilfe

  • mhhh probier das mal aus...link zur bereits existierenden topic ist schon drinn ;) und nem zitat vom funktionierenden quellcode


    Link

    • Offizieller Beitrag

    Und hier noch ne Variante, falls die *.txt unterhalb eines Startpfades in diversen Ordnern liegen, also rekursiv gesucht werden müssen.

    Spoiler anzeigen
    [autoit]

    Dim $Pfad_txt = "C:\Files" ; Startpfad für rekursive Suche nach TXT-Files
    Dim $Pfad_Backup = "C:\Backup\" ; Wurzelpfad für Sicherungen
    Dim $SaveDir
    Dim $arTXT ; Array mit den ermittelten TXT-Files

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

    $arTXT = _GetFileList($Pfad_txt, "*.txt")
    If IsArray($arTXT) Then
    $SaveDir = DirCreate($Pfad_Backup & @YEAR & "-" & @MON & "-" & @MDAY)
    For $i = 1 To $arTXT[0]
    $var = StringSplit($arTXT[$i], "\")
    FileMove($arTXT[$i], $SaveDir & "\" & $var[$var[0]]) ; Datei in Backupordner verschieben
    Next
    EndIf

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

    ; AutoIt Version: 3.0
    ; Language: English
    ; Platform: Win9x/NT/XP
    ; Author: jos van der Zande
    ;
    ; Find files in directory and subdirectories and return it in an Array, all coded in Autoit3
    ;
    ; _GetFileList($DIR, $FILEMASK, 1) ; _GetFileList($DIR, $FILEMASK [, Flag]) Flag GetFile(Default) = 0 , GetDirOnly = 1
    ;********************************************************************************
    ;Recursive search for filemask
    ;********************************************************************************

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

    Func _GetFileList($T_DIR,$T_MASK,$DIR_ONLY=0)
    Dim $N_DIRNAMES[200000] ; max number of directories that can be scanned
    Local $N_DIRCOUNT = 0
    Local $N_FILE
    Local $N_SEARCH
    Local $N_TFILE
    Local $N_OFILE
    Local $T_FILENAMES
    Local $T_FILECOUNT
    Local $T_DIRCOUNT = 1
    Local $FILEMASK
    ; check Filemask \ for empty File-Array by GetDirOnly
    If $FILEMASK = "n" Then $FILEMASK = "*.no"
    ; remove the end \ If specified
    If StringRight($T_DIR,1) = "\" Then $T_DIR = StringTrimRight($T_DIR,1)
    $N_DIRNAMES[$T_DIRCOUNT] = $T_DIR
    ; Exit if base dir doesn't exists
    If Not FileExists($T_DIR) Then Return 0
    ; keep on looping until all directories are scanned
    While $T_DIRCOUNT > $N_DIRCOUNT
    $N_DIRCOUNT = $N_DIRCOUNT + 1
    ; find all subdirs in this directory and save them in a array
    $N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\*.*")
    While 1
    $N_FILE = FileFindNextFile($N_SEARCH)
    If @error Then ExitLoop
    ; skip these references
    If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
    $N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
    ; if Directory than add to the list of directories to be processed
    If StringInStr(FileGetAttrib( $N_TFILE ),"D") > 0 Then
    $T_DIRCOUNT = $T_DIRCOUNT + 1
    $N_DIRNAMES[$T_DIRCOUNT] = $N_TFILE
    EndIf
    Wend
    FileClose($N_SEARCH) ; find all Files that mtach the MASK
    $N_SEARCH = FileFindFirstFile($N_DIRNAMES[$N_DIRCOUNT] & "\" & $T_MASK )
    If $N_SEARCH = -1 Then ContinueLoop
    While 1
    $N_FILE = FileFindNextFile($N_SEARCH)
    If @error Then ExitLoop
    ; skip these references
    If $N_FILE = "." Or $N_FILE = ".." Then ContinueLoop
    $N_TFILE = $N_DIRNAMES[$N_DIRCOUNT] & "\" & $N_FILE
    ; if Directory than add to the list of directories to be processed
    If StringInStr(FileGetAttrib( $N_TFILE ),"D") = 0 Then
    $T_FILENAMES = $T_FILENAMES & $N_TFILE & @CR
    $T_FILECOUNT = $T_FILECOUNT + 1
    ;MsgBox(0,'filecount ' & $T_FILECOUNT ,$N_TFILE)
    EndIf
    Wend
    FileClose($N_SEARCH)
    Wend
    If $DIR_ONLY = 0 Then
    $T_FILENAMES = StringTrimRight($T_FILENAMES,1)
    $N_OFILE = StringSplit($T_FILENAMES,@CR)
    Return( $N_OFILE )
    Else
    ReDim $N_DIRNAMES[$N_DIRCOUNT+1]
    $N_DIRNAMES[0] = $N_DIRCOUNT
    Return $N_DIRNAMES
    EndIf
    EndFunc ;==>_GetFileList

    [/autoit]

    EDIT:
    Man soll nicht unbedingt nach 12 Std. Arbeit versuchen Programmierprobleme zu lösen ;) , da war ich etwas unaufmerksam und ein Fehler hat sich eingeschlichen.
    Hab ihn hiermit geBugFixt :rofl:

  • morgen,


    vielen dank mal an euch beiden. ich werde das mal heute im laufe des tages testen und bescheid geben.....