Unglaublich kompliziert ausgedrückt :-D

  • Also, mein Skript tut folgendes, bzw. zumindest sollte es das tun:

    1. Poppt ein Gui auf, wo man 2 Ordner-Links einfügt

    2. Durchsucht es diese beiden Ordner und gibt mir aus wenn

    a) Dateien in Ordner 1 nicht sind

    b) Dateien in Ordner 2 nicht sind

    c) Dateien in Ordner 1 aktueller sind

    d) Dateien in Ordner 2 aktueller sind


    Das scheint bisher gut zu funktionieren. Momentan gibt er mir das in einer Array aus (_Displayarray). Später nehme ich _Displayarraytree, die hatte mal ein user hier gepostet, wenn ich mich recht errinere^^

    Hier ist mein Skript bisher:

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

    #Include <File.au3>
    #Include <Array.au3>
    #Include <Date.au3>
    #include <INet.au3>
    #include <Word.au3>
    #include <GUIConstants.au3>
    #include <_ArrayDisplayTree.au3>
    Global $oMyRet[2]
    Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
    ; GUI Befehle
    GUICreate("Vergleichspfade eingeben", 300, 180) ;Öffnet das Fenster
    GUISetState (@SW_SHOW) ;Fenster wird angezeigt
    $pfadi1 = GUICtrlCreateInput ( "C:\Users\install\Desktop\Kev", 50, 50) ;InputZeile für Pfad 1
    $pfadi2 = GUICtrlCreateInput ( "C:\Users\install\Desktop\Salva", 50, 100) ;InputZeile für Pfad 2
    GUICtrlCreateLabel ( "Beenden mit ESC", 100, 10)
    $button = GUICtrlCreateButton("OK", 100, 140, 40, 20) ;Button "OK" wird angezeigt
    $button2 = GUICtrlCreateButton("Beenden", 145, 140, 70, 20)
    $pfad1 = "C:\Users\install\Desktop\Kev"
    $pfad2 = "C:\Users\install\Desktop\Salva"
    ; Arrays für die Ergebnisse
    Dim $vergleichsarray0[1]
    $vergleichsarray0[0] = "Diese Dateien sind in beiden Ordnern!"
    Dim $vergleichsarray1[1]
    $vergleichsarray1[0] = "Diese Dateien sind im Ordner" & " " & $pfad1 & " " & "aktueller!"
    Dim $vergleichsarray2[1]
    $vergleichsarray2[0] = "Diese Dateien sind im Ordner" & " " & $pfad2 & " " & "aktueller!"
    Dim $vergleichsarray4[1]
    $vergleichsarray4[0] = "Diese Dateien sind nicht im Ordner " & $pfad1 & " vorhanden!"
    Dim $vergleichsarray5[1]
    $vergleichsarray5[0] = "Diese Dateien sind nicht im Ordner " & $pfad2 & " vorhanden!"
    HotKeySet ("{ESC}","close")
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $button
    ; Holen der Pfadinformationen
    $filelist1 = _FileListToArray($pfad1) ; Array der Dateien Pfad 1
    $filelist2 = _FileListToArray($pfad2) ; Array der Dateien Pfad 2
    $fileanzahl1 = $filelist1[0] ;Gibt an, wieviele Dateien es überhaupt sind, das wird in der Array in Zeile "0" ausgegeben
    $fileanzahl2 = $filelist2[0] ;Gibt an, wieviele Dateien es überhaupt sind, das wird in der Array in Zeile "0" ausgegeben
    $zaehler = 1
    While $zaehler <= $fileanzahl1 ;Läuft so lange, bis alle Dateien durch sind
    ; Holen der Dateiinformation aus Feld 1
    $filename1 = $filelist1[$zaehler] ;Gibt Namen der Datei aus, für späteres 2. Array
    $filehandle1 = $pfad1 & "\" & $filelist1[$zaehler]
    $filedatum1 = FileGetTime($filehandle1) ;Zeigt Datum der Datei an
    If @error Then
    MsgBox(0,"$zaehler",$zaehler)
    MsgBox(0,"$filehandle1",$filehandle1)
    MsgBox(0,"$filelist1$zaehler",$filelist1[$zaehler])
    Exit
    EndIf
    $filedatum11=$filedatum1[0] & "/" & $filedatum1[1] & "/" & $filedatum1[2] & " " & $filedatum1[3] & ":" & $filedatum1[4] & ":" & $filedatum1[5] ;Definiert das Datum im Format YYYY/MM/DD HH:MMS
    $arraysearch1 = _ArraySearch($filelist2,$filename1)
    If $arraysearch1 <> -1 Then
    ; Datei in beiden vorhanden
    $filehandle2 = $pfad2 & "\" & $filelist2[$arraysearch1]
    $filedatum2 = FileGetTime($filehandle2) ;Zeigt Datum der Datei an
    $filedatum21=$filedatum2[0] & "/" & $filedatum2[1] & "/" & $filedatum2[2] & " " & $filedatum2[3] & ":" & $filedatum2[4] & ":" & $filedatum2[5] ;Definiert das Datum im Format YYYY/MM/DD HH:MMS
    ; Berechnen der Zeitdifferenz
    $differenz= _DateDiff('n', $filedatum21,$filedatum11) ;Rechnet die Differenz der beiden Daten aus
    If $differenz > 0 Then
    _Arrayadd($vergleichsarray1, $filename1)
    ; Elseif $differenz < 0 Then
    ; _Arrayadd($vergleichsarray2, $filename1)
    Endif
    Else
    ; Datei in Pfad 1 aber nicht in Pfad 2
    _ArrayAdd($vergleichsarray5, $filename1)
    EndIf
    $zaehler = $zaehler +1
    WEnd
    $zaehler = 1
    While $zaehler <= $fileanzahl2 ;Läuft so lange, bis alle Dateien durch sind
    ; Holen der Dateiinformation aus Feld 1
    $filename1 = $filelist2[$zaehler] ;Gibt Namen der Datei aus, für späteres 2. Array
    $filehandle1 = $pfad2 & "\" & $filelist2[$zaehler]
    $filedatum1 = FileGetTime($filehandle1) ;Zeigt Datum der Datei an
    If @error Then
    MsgBox(0,"$zaehler",$zaehler)
    MsgBox(0,"$filehandle1",$filehandle1)
    MsgBox(0,"$filelist1$zaehler",$filelist1[$zaehler])
    Exit
    EndIf
    $filedatum11=$filedatum1[0] & "/" & $filedatum1[1] & "/" & $filedatum1[2] & " " & $filedatum1[3] & ":" & $filedatum1[4] & ":" & $filedatum1[5] ;Definiert das Datum im Format YYYY/MM/DD HH:MMS
    $arraysearch1 = _ArraySearch($filelist1,$filename1)
    If $arraysearch1 <> -1 Then
    ; Datei in beiden vorhanden
    $filehandle2 = $pfad1 & "\" & $filelist1[$arraysearch1]
    $filedatum2 = FileGetTime($filehandle2) ;Zeigt Datum der Datei an
    $filedatum21=$filedatum2[0] & "/" & $filedatum2[1] & "/" & $filedatum2[2] & " " & $filedatum2[3] & ":" & $filedatum2[4] & ":" & $filedatum2[5] ;Definiert das Datum im Format YYYY/MM/DD HH:MMS
    ; Berechnen der Zeitdifferenz
    $differenz= _DateDiff('n', $filedatum21,$filedatum11) ;Rechnet die Differenz der beiden Daten aus
    If $differenz > 0 Then
    _Arrayadd($vergleichsarray2, $filename1)
    ; Elseif $differenz < 0 Then
    ; _Arrayadd($vergleichsarray1, $filename1)
    Endif
    Else
    ; Datei in Pfad 1 aber nicht in Pfad 2
    _ArrayAdd($vergleichsarray4, $filename1)
    EndIf
    $zaehler = $zaehler +1
    WEnd

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

    ;~ msgbox(0,"",$differenz)
    ;~ msgbox(0,"alarm","!!!!!")
    ;Array "Vergleichsarray 0" = Dateien sind in beiden Ordnern
    ;Array "Vergleichsarray 1" = Datei ist in Ordner 2 akuteller
    ;Array "Vergleichsarray 2" = Datei ist in Ordner 1 aktueller
    ;Array "Vergleichsarray 4" = Datei ist in Ordner 1 nicht vorhanden
    ;Array "Vergleichsarray 5" = Datei ist in Ordner 2 nicht vorhanden
    _ArrayDisplay($vergleichsarray4)
    _ArrayDisplay($vergleichsarray5)
    _Arraydisplay($vergleichsarray0, "Vergleichsscript")
    _Arraydisplay($vergleichsarray1, "Vergleichsscript")
    _Arraydisplay($vergleichsarray2, "Vergleichsscript")
    ;_ArrayDisplayTree($vergleichsarray0)
    case $msg = $button2
    Exit
    EndSelect
    WEnd

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

    ;************************************
    ;************Funktionen**************
    ;************************************

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

    Func close() ;Funktionsdeklarierung für den Hotkey "ESC"
    Exit
    EndFunc

    [/autoit]


    Okay, was es jetzt tun soll: Sobald ich auf einen Eintrag in 2a) klicke, soll er mir die Datei, die angeklickt wird, kopieren. Für hilfe wäre ich sehr dankbar =)

  • *hust*
    Also ich würde mich ja mal genauer ausdrücken...

    Zitat

    1. Poppt ein Gui auf

    ^^ Hoffe du verstehs was ich mein... (das 1wort nach 1.) :rolleyes:

    Nur keine Hektik - das Leben ist stressig genug

    • Offizieller Beitrag


    2a und 2b) Was für Dateien?
    2c und 2d) Aktueller als was/wer?

    Okay, was es jetzt tun soll: Sobald ich auf einen Eintrag in 2a) klicke, soll er mir die Datei, die angeklickt wird, kopieren. Für hilfe wäre ich sehr dankbar =)


    Wie willst Du auf einen Eintrag klicken? In _ArrayDisplay() kann man nichts anklicken. Erstell am besten ein Listview, in dem Du die Dateien einträgst.
    Kopieren? Wohin?

  • Dateien können alles mögliche sein. z. B. Excel-Tabellen, Ordner, eigentlich so ziemlich alles...

    Aktueller: Naja, es kann halt sein, dass die Dateien 2 mal existieren, weil verschiedene Leute im Unternehmen daran arbeiten.Wenn jetzt in Ordner 1 die Datei aktueller ist, bzw. die Daten darin neuer sind (würde ja das Änderungsdatum automatisch aktualisieren), muss es der anderen Gruppe auch so zur Verfügung stehen... Ein Listview? Probier ich nachher mal...

    • Offizieller Beitrag

    weil verschiedene Leute im Unternehmen daran arbeiten.


    Wenn das der Fall ist, solltest du vielleicht mal über ein Repository nachdenken. Ich weiß nicht, wie der Dateizugriff geregelt ist - wenn eine Datei als lokale Kopie geöffnet wird und das von mehreren Usern gleichzeitig, ändern sie sich u.U. gegenseitig alles ins Nirvana. :S