Den Inhalt zweier Ordner Vergleichen

  • Hallo ,

    ich hab nur Grundkenntnisse im Umgang mit Autoit und brauch Eure Unterstützung wenn das ginge.

    Ich habe mich schon ein weing hier im Forum belesen allerdings muss ich feststellen das ich wohl noch

    nicht ohne eine direkte hilfe hinbekomme.

    Zu meinem Problem:

    Ich habe drei PC´s (ArbeitsPC) auf denen eine Software läuft die ständig neue Updates benötigt.

    Auf einem vierten PC (ZentralPC) liegen in einem Ordner alle Update Dateien.

    Dieser Ordner wird in unregelmäßigen Abständen mit neuen Dateien aktualisiert / aufgefüllt.

    Was ich nun erst mal gerne verstehen möchte ist, wie schaffe ich es

    einen Vergleich zwischen den Ordnerinhalt eines ArbeitsPC und des ZentralPC bzw

    dann in folge des Vergleichs eine Auflistung der fehlenden Dateien/Updates im ArbeitsPC

    herbeizuführen? Vieleicht in eine Textdatei.


    Ich hoffe ich hab es einigermassen gut beschrieben.


    Gruß Jan

    Einmal editiert, zuletzt von JanausSm (15. Januar 2009 um 12:13)

  • hast du schon angefangen mit dem Programm? Dann her mit dem code.
    Soll der Zentralpc die Dateien einfach auf die drei PC´s kopieren, wenn er neuere hat als die Arbeits PC´s ?

    Das sollte kein Problem sein, wenn die Ordner auf dem Arbeits´s PC´s freigegeben sind und der Zentralpc darauf zugreifen kann/darf.

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • @ zemkedesign
    Danke für diesen Tip. Das hab ich im übrigen auch schonmal hier irgendwo gelesen mit der Funktion Comp.

    Aber ich möchte es je gerade des Verständniss wegen mit den möglichkeiten von Autoit machen.


    @ franzp

    auch Dir ein Danke für die schnelle reaktion auf miene Frage.
    Nein ich hab mit dem Progamm noch nicht angefangen da ich nach meinen Verständniss diese Prüfung nach einer Neuerung im ZentralPC
    wohl der anfang sein muss.

    Mein Gedanke ist das eine ... sagen wir Clientsoftware auf den ArbeitsPC´s bei jedem Neustart prüft ob auf dem ZentralPC eine oder mehrere
    Dateien liegen die der ArbeitsPC in seinem Ordner noch nicht hat. Und dann eben im nächsten schritt sich die fehlenden Dateien in seinen Ordner kopiert.

    Kannst Du da helfen ????


    Gruß Jan

  • Warum Dinge mit AutoIt neu programmieren, wenn sie mit Windows schon mitgeliefert werden?!

    Auf dem ArbeitsPC legst du ein geplanten Task an, der alle x Minuten/Stunden etc aufgerufen wird.
    Dieser Task ruft eine Batchdatei auf mit folgendem Inhalt:

    Code
    xcopy \\ZentralPC\ordner D:\ordner /Y /E /D /C /I


    Durch /D ohne Datum werden nur neuere Dateien als bereits vorhanden oder ganz neue kopiert.

  • Ich persönlich würde das auch eher mit Autoit als mit windows boarmitteln machen. Wenn die Xcopy Zeile aus irgendeinem Grund nichts kopiert, weil z.B. die Berechtigung nicht mehr stimmen dann bekommt der Benutzer keine DAU Fehlermeldung :D

    JanausSm
    ja klar können wir Dir da helfen. Wo hängt´s denn?

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • als kleine gedankenshilfe! So kannst Du z.B. alle fehlenden Dateien hinzufügen..

    $cent_folder ist der Ordner auf dem Zentralpc
    $install_folder ist der Ordner auf den Arbeitspc

    [autoit]

    #include <File.au3>
    Global $cent_folder = "\\s01\daten\_ Scan Jobs\"
    Global $install_folder = "c:\test\"

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

    $array_cent = _FileListToArray($cent_folder)

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

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

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

    hier werden geänderte Dateien noch nicht mitgenommen! Vielleicht schafft du das dann alleine... Macht auch mehr Spaß als alles schreiben zu lassen ;)

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Da hast Du recht allerdings bin ich bei weitem noch nicht so weit das ich das selbst schaffe.

    Aber ich habe einen Kumpel der mir diese sache sehr genau erklärt hat.
    Sicher ist da noch nicht alles hängen geblieben aber komme der Sache nun auf die Spur. Ich danke Dir für Deine hinweise.
    Hier mal das fertige Script was genau so funktioniert wie ich es möchte.

    Spoiler anzeigen
    [autoit]


    #include <file.au3>
    $DirServer = "\\192.168.55.147\server\"
    $DirClient = "C:\Robcat\"
    $rechtstrimmen = StringTrimRight($DirServer,8)
    $linkstrimmen = StringTrimLeft($rechtstrimmen,2)

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

    $pingtest = ping($linkstrimmen,250)
    if $pingtest ==0 Then
    MsgBox(048, "Achtung", "Der Server ist nicht erreichbar. Der Updateversuch wird abgebrochen.")
    Exit
    Else

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

    $msgbox_wert7 = MsgBox(324,"Information", "Der Server ist erreichbar. Wollen Sie nun den Datenabgleich durchführen?")
    If $msgbox_wert7 ==7 Then

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

    _FileWriteLog($DirServer & "\" & @ComputerName & ".log","Die Software - Aktualisierung wurde vom Benutzer abgelehnt.")
    Exit
    EndIf

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

    EndIf

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

    ; Es wird auf dem Server in der version.ini nachgesehen ob dort ein Eintrag zu dem Client-PC zu finden ist
    ; Falls kein Eintrag vorhanden ist so wird hier abgebrochen
    $IniVersion = IniRead($DirServer & "version.ini", "version", @ComputerName, "-999")
    if $IniVersion == -999 Then
    MsgBox(16, "Achtung", "Der Rechner existiert nicht in der Version.ini auf dem Server.")
    Exit
    EndIf
    ; Es wird in der Lokalen client.ini nachgesehen bzw kontrolliert ob überhaupt eine client.ini existiert
    ; Wenn sie nicht existiert wird sie angelegt und mit den aktuellsten Informationen aus der Serverseitigen version.ini versorgt
    $IniClientVersion = IniRead($DirClient & "client.ini", "clientversion", @ComputerName, "-999")
    if $IniClientVersion == -999 Then
    IniWrite($DirClient & "client.ini" , "clientversion", @ComputerName, $IniVersion)
    ; hier wird der wert aus der version.ini hier übernommen
    $IniClientVersion=$IniVersion

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

    EndIf
    ; im Falle eines Versions-Upgrades wir an dieser stelle der alte ordner umbenannt
    if $IniClientVersion <> $IniVersion Then
    DirMove($DirClient,StringTrimRight( $DirClient,1) & "_" & $IniClientVersion)
    EndIf

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

    ; setzte hier den Ordner Robcat_ mit der Versionsnummer zusammen um dann den richtigen Versionsordner auf dem Server zu durchsuchen
    $DirServer = $DirServer & "Robcat_V" & $IniVersion & "\"

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

    _unterordner ($DirClient, $DirServer)

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

    Func _unterordner ($DirClient, $DirServer)

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

    $search = FileFindFirstFile($DirServer & "*.*")
    While 1

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

    $file = FileFindNextFile($search)
    If @error Then ExitLoop

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

    $attrib = FileGetAttrib($DirServer & $file)

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

    ;
    If StringInStr($attrib, "D") Then

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

    if FileExists($DirClient & $file & "\")==0 Then
    DirCreate($DirClient & $file & "\")
    EndIf

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

    ; Rekurstion
    _unterordner ($DirClient & $file & "\", $DirServer & $file & "\")

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

    ElseIf FileExists($DirClient & $file)==0 or FileGetTime($DirServer & $file, 0,1) <> FileGetTime($DirClient & $file, 0,1) Then

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

    FileCopy($DirServer & $file, $DirClient, 9 )

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

    EndIf

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

    WEnd
    ; Handle für Suche schliessen
    FileClose($search)

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

    EndFunc

    [/autoit]


    Jetzt werde ich da noch ein wenig dran herum spielen um, so glaube ich zu mindest, weiter zu verstehen.


    Edit Oscar: Bitte AutoIt-Tag und Spoiler benutzen!


    Gruß Jan

    Einmal editiert, zuletzt von Oscar (15. Januar 2009 um 12:15)

  • Ist aber nicht wirklich das was du oben beschrieben hast! Naja solange es funktioniert.

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---