2 Folder und deren Dateien miteinander vergleichen

  • Hey Leute,
    ich bin mal wieder an ein Problem gekommen, bzw. weiß ich nicht so ganz wie es anstellen soll..
    Und zwar würde ich sehr gerne 2 Ordner bzw deren Dateien(+Unterordner) miteinander vergleichen. Da reicht schon date-modified miteinander abgleichen pro Datei.
    Beide Ordner enthalten überwiegend die selben Dateien.
    Ich möchte nun einen Array erhalten, wo alle Dateinamen enthalten sind, welche sich im Datum(date motified) voneinander unterscheiden .

    Z.b ist in beiden Ordner die Datei "test.txt". In Ordner 1 mit dem Datum 12.10.2021 19:25:02, aber in Ordner 2 ein neueres Datum. Dann sollte die "text.txt" in den Array hinein, weil diese neuer ist als in Ordner 1.
    Zusätzlich würde ich sehr gerne "neue" Dateien erkennen. Also jene, die bereits in Ordner 2, aber nicht in Ordner 1 sind.

    _FileListArrayToRec scheint mir das zu sein was ich benötige und Unterordner durchsucht es eben so.
    Leider weiß ich nicht wie ich das mache..

    Könnte mir jemand auf die Sprünge helfen? :)

    Vielen Dank im voraus!

  • Könnte mir jemand auf die Sprünge helfen? :)

    Ich kann ja verstehen, dass Du möglichst schnell eine Lösung für dein Problem erhalten möchtest. Die identische Frage zeitgleich im englischen (compare-content-of-2-folders) und im deutschen Forum zu stellen führt aber dazu, dass sich Helfende ggf. unnötige Arbeit machen. Nicht alle lesen parallel in beiden Foren. Entscheide Dich für ein Forum, und wenn 2 bis 3 Tage nichts passiert, dann kannst Du immer noch im anderen fragen.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • In Zukunft bitte keine Crosspostings mehr... sonst werde ich dir nicht mehr helfen.


    Hier eine kleine Demo:

  • Hier noch eine Demo mit Ausgabe des Copy-Befehls:

  • Bitte, kannst Du mir das erklären?

    ? ist der Ternary Operator - eine Kurzform für If...Else...EndIf.

    AutoIt
    Local $a = 11, $b = 9, $x
    
    ; (expression) ? (expression1 if expression is True) : (expression2 if expression is False)
    $x = ($a > $b) ? ($a) : ($b) ; ==>> $x = $a
    
    If $a > $b Then
        $x = $a ; ==>> $x = $a
    Else
        $x = $b
    EndIf
  • Bitte, kannst Du mir das erklären?

    Global $g_sSlash1 = StringInStr($g_sPath1, '\') ? '\' : '/'


    Ohne es definitiv zu wissen denke ich das er wenn "\" im String ist, es durch "/" ersetzt wird.

    Nein, ersetzt wird an dieser Stelle nichts. Es wird geprüft, ob im Pfad (mindestens) ein \ vorkommt. Falls Ja, dann wird $g_sSlash1 ein \ zugewiesen. Falls Nein, dann ein /.


    EDIT : Beispiel :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi ()

  • Bitnugger :

    Könntest Du Deine Lösung ggf. auch im englischen Thread posten ?

    Wenn ich das mache, dann bekomme ich am Ende noch (völlig unverdient) die Credits ;) .

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Sei dir gegönnt... also mach dich ran... 8o

    Ich habe im EN-Forum einfach einen Link auf diesen Thread (präziser : auf Deinen Beitrag) gesetzt :) .


    sebiix3 :

    Cross-Postings sind nicht per se eine schlechte Sache. Möchte man z.B. Skripte veröffentlichen oder auf Fehler etc. hinweisen (also Dinge von allgemeinem Interesse), dann sind sie sogar hilfreich.

    Bei individuellen Fragen sollte man sich aber erst mal auf ein Forum beschränken.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Generell gibt es genau für diese Fragestellung bereits fertige Programme!



    Cross-Postings sind nicht per se eine schlechte Sache

    ...wobei noch der dezente Hinweis des TE "...und legt mir mal einer bitte den Arm aus der Sonne..SCHNELLSTMÖGLICH!" angefügt werden sollte!


    Sonst kommt wohlmöglich eines der Forenmitglieder auf die Idee, bei fehlendem "Versuchs"-Script davon auszugehen, dass jemand anderes (sic) sich die Mühe macht!

    Man (TE) will ja schliesslich erreichen, dass sich 6-8 Forianer in jeweils ihrem Forum mit der allerbesten Lösung überbieten, die man dann letztendlich nur noch aus dem letzten Beitrag rauskopieren und ausführen muss!

    Das Beste daran: Man muss nicht mal das Forum durchsuchen!



    sonst werde ich dir nicht mehr helfen.

    S.o.!

    Der Unterschied zwischen "helfen" und komplett alles nach Vorgabe des TE machen ist ein gewaltiger!

    Wer nicht mal in der Lage ist, dieses schon x-mal in beiden Foren abgehandelte Thema zu SUCHEN und ggf. auf Probleme mit diesen Scripten hinzuweisen, dem gehört nicht geholfen!

    So sehe ich das!


    OT an Bitnugger

    Dass dieses Script für dich nur eine Fingerübung ist, macht es nicht besser :D

    Aber wie immer dafür von mir ein :thumbup:



    Ich möchte nun einen Array erhalten, wo alle Dateinamen enthalten sind, welche sich im Datum(date motified) voneinander unterscheiden .

    Wieso ein AutoIt-Array?!

    Wenn du bereits so fit mit AutoIt bist, dass du in deinem Script mit den Arrayinhalten weiterarbeiten/programmieren kannst, dann hättest du auch dieses/dein Script posten können.

    Das hätte man/ich dann auch gerne erweitert/verbessert/vervollständigt.

    Aber ich gehe davon aus, dass dir ein herzhaftes _ArrayDisplay() völlig ausreicht, um händisch mit diesen Dateien weiterzuarbeiten. Denn irgendetwas musst du ja mit diesen Dateien machen wollen?!

  • Vielen Dank für die Erklärung!


    Ich bin leider auch einer der sehr gerne IF/THEN/ELSE verwendet obwohl es doch viel einfach oder kürzer geht!


    Bitnugger: Super Beispiel für den Vergleich zu IF-Then (extra danke dafür)


    lg

    Racer

  • [Off-Topic]

    ...wobei noch der dezente Hinweis des TE "...und legt mir mal einer bitte den Arm aus der Sonne..SCHNELLSTMÖGLICH!" angefügt werden sollte!

    Diesen Ausspruch habe ich wirklich vermisst - muss schon einige Zeit her sein, dass Du ihn verwendet hast ^^ .


    Was das "Demo-Skript" von Bitnugger angeht, auch von mir ein :thumbup:. Ich denke, dass Bitnugger gar nicht in der Lage ist ein 'nur halbfertiges' Skript abzuliefern ;)

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Ich bin leider auch einer der sehr gerne IF/THEN/ELSE verwendet obwohl es doch viel einfach oder kürzer geht!

    Ja... mal schauen, in 1-3 Jahren siehst du das sicher anders! ;)


    Hier noch ein Bsp., um es dir schmackhaft zu machen 8o :

  • Mal ein anderer Ansatz:

    Solltest Du ein bestimmtes Problem lösen wollen und das nicht zwingend mit AutoIT, könntest Du das vielleicht auch mit verfügbarer Software machen.

    Mach von beiden Verzeichnissen mit der Shell jeweils eine Textdatei und vergleiche die mit Notepad++ mit dem Plugin "Compare".

    Vermutlich gibt es auch noch diverse andere Hilfsmittel in der weiten Welt des Netzes.

  • Solltest Du ein bestimmtes Problem lösen wollen und das nicht zwingend mit AutoIT, könntest Du das vielleicht auch mit verfügbarer Software machen.

    Richtig, das ist so gut wie immer machbar, doch wenn ein User nicht selbst darauf kommt, hat er ein dringenderes Problem, das sich mit Software nicht lösen lässt... von daher ist dieser Hinweis für meine Begriffe eher überflüssig.

    Mach von beiden Verzeichnissen mit der Shell jeweils eine Textdatei und vergleiche die mit Notepad++ mit dem Plugin "Compare".

    Das ist so ziemlich sicher einer der umständlichsten Wege, um sein Problem zu lösen... denn der größte Teil an Arbeit bleibt so ja trotzdem bei ihm hängen. Da du hier die Shell erwähnst... ja, damit ginge das auch relativ einfach... also via Batch mit CMD oder Powershell - die ihm dann die ganze Arbeit abnehmen. Doch irgendwer muss das Batch ja dann auch schreiben... und da muss man schon richtig fit für sein, um dies hinzubekommen.

    Mit AutoIt bekomme ich das in ~ 15-30 Minuten hin... für ein Batch mit CMD oder Powershell wäre mein Tag vermutlich versaut.

    Vermutlich gibt es auch noch diverse andere Hilfsmittel in der weiten Welt des Netzes.

    In der Tat... die gibt es... z.B. Total Commander... der hat eine super Funktion dafür eingebaut, mit der Verzeichnisinhalte synchronisiert werden können - ein sehr mächtiges Werkzeug, dass keine Wünsche offen lässt.