Verzeichnisse vergleichen, Unterschiede sichern.

  • Hallo Gemeinde,
    da ich neu hier bin, möchte ich mich erst mal kurz (sehr kurz) vorstellen,
    mein Name ist Manfred, schon etwas älter aber mit Programieren bis dato kaum zu tun.
    Seit ein paar Tagen beschäftige ich mich mit AutoIt und muß sagen es gefällt mir sehr gut.
    Nun aber zu meinem Problem, bei dem Ihr mir hoffentlich behilflich seit.

    Mein Aufbau:
    ich habe ein Verzeichnis Prod, mit einer Anzahl Dateien x. ca. 150
    Mehrere Unterverzeichnise 2013_yyyy mit Anzahl n. (wobei n kann sein 1 bis 10)

    Meine Vorstellung:
    Nun würde ich gerne die Dateien die in 2013_yyyy in eine Arry schreiben,
    dann diese vergleichen mit den Dateien aus Prod.
    Anschliessend die gleichnamigen Dateien aus Prod in ein Verzeichnis Temp schieben und
    danach die Dateien aus 2013_yyyy in das Verzeichnis Prod kopieren.

    beim Googlen hab ich folgendes Gefunden:

    Spoiler anzeigen

    #include <File.au3>
    Global $save_folder = "y:\Movex412\Env\Prod\export\exported_configurations\20130502_20130211\"
    Global $work_folder = "y:\Movex412\Env\Prod\export\exported_configurations\"
    Global $Temp_folder = "y:\Movex412\Env\Prod\export\exported_configurations\temp\"

    $array_cent = _FileListToArray($save_folder)

    for $i = 1 to UBound($array_cent) -1
    if FileExists($work_folder & $array_cent[$i]) = 0 Then
    FileCopy($work_folder & $array_cent[$i], $Temp_folder & $array_cent[$i])
    EndIf
    Next


    Leider funktioniert das nicht.
    Ich muß auch zugeben, das ich das mit Array nicht so ganz kappiert habe und hoffe jemand kann es erklären,
    so das es auch ein dummy wie ich versteht. Evtl. mir auch sagen was an dem codeschnipsel falsch ist.

    Nun hoffe ich noch, das ich das ganze Verständlich dargestellt habe.

    Vielen Dank jetzt schon
    Gruß
    Manfred

    Ja, ich weiß es auch, das Problem ist einen halben Meter vor dem Bildschirm. 8o

    Einmal editiert, zuletzt von Mr-Ferret (22. Mai 2013 um 14:19)

  • Hallo Manfred,

    ich hatte ein ähnliches Problem vor kurzer Zeit.

    Die Lösung habe ich letztlich hier im Forum gefunden.
    Suche mal nach den Funtionen _Check und _RecursiveFileListToArray

    ; Function Name: _Check($Verz1, $Verz2, $iDays)
    ; Description: Compare DIR1 against DIR2 for unique Files
    ; Author(s): Oscar (https://autoit.de/www.autoit.de)
    ; Impulsed vby: bernd670 (https://autoit.de/www.autoit.de)


    ; Function Name: _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    ; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die einem RegExp-Pattern entsprechen
    ; Author(s): Oscar (https://autoit.de/www.autoit.de)
    ; Anregungen von: bernd670 (https://autoit.de/www.autoit.de)


    Gruss
    ugt100 ;)

  • Ich nutze _FileListToArray() meist um rekursiv alles auszulesen und dann kannste ja danach einfach in einer Schleife stumpf nach Gott und die Welt abfragen ;)

    Grüße Yaerox

    Grüne Hölle

  • ja vielen Dank erst mal für die schnellen Antworten,

    nach erneuter Suche im Forum und www, hab ich mir das Script noch mal genauer angesehen und "versucht" logisch vorzugehen.
    Siehe da, es funzt. :thumbup:
    Das ganze sieht dann wie folgt aus, nur für die, die es interessiert.

    Spoiler anzeigen

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

    Global $save_folder = "y:\Movex412\Env\Prod\export\exported_configurations\20130422_20130071\"
    Global $work_folder = "y:\Movex412\Env\Prod\export\exported_configurations\"
    Global $Temp_folder = "y:\Movex412\Env\Prod\export\exported_configurations\temp\"

    ; Local $FileListSave = _FileListToArray($save_folder)
    ; Local $FileListWork = _FileListToArray($Work_folder)

    $array_cent = _FileListToArray($work_folder)

    for $i = 1 to UBound($array_cent) -1
    if FileExists($save_folder & $array_cent[$i]) Then ; = 0 Then
    FileCopy($work_folder & $array_cent[$i], $Temp_folder & $array_cent[$i])
    EndIf
    Next

    Darum noch mal danke!
    Gruß
    Manfred
    PS: Da ich ja weiter versuche meine Programme zu schreiben, werde bestimmt weiter eure Hilfe in Anspruch nehmen. :D

    Ja, ich weiß es auch, das Problem ist einen halben Meter vor dem Bildschirm. 8o

  • Dafür ist das Forum ja da :D

    Würdest du vielleicht demnächst Code in [.autoit][/.autoit] schreiben nur ohne . logisch? ;)

    Grüße Yaerox

    Grüne Hölle

  • sorry YaeroxXO

    Zitat

    Würdest du vielleicht demnächst Code in [.autoit][/.autoit] schreiben nur ohne . logisch?

    ich versuche mich zu bessern,

    [autoit]


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

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

    Global $save_folder = "y:\Movex412\Env\Prod\export\exported_configurations\20130422_20130071\"
    Global $work_folder = "y:\Movex412\Env\Prod\export\exported_configurations\"
    Global $Temp_folder = "y:\Movex412\Env\Prod\export\exported_configurations\temp\"

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

    ; Local $FileListSave = _FileListToArray($save_folder)
    ; Local $FileListWork = _FileListToArray($Work_folder)

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

    $array_cent = _FileListToArray($work_folder)
    for $i = 1 to UBound($array_cent) -1
    if FileExists($save_folder & $array_cent[$i]) Then ; = 0 Then
    FileCopy($work_folder & $array_cent[$i], $Temp_folder & $array_cent[$i])
    EndIf
    Next

    [/autoit]

    aber was meinst du mit

    Zitat

    nur ohne . logisch?

    Gruß
    Manfred

    Ja, ich weiß es auch, das Problem ist einen halben Meter vor dem Bildschirm. 8o