Festgelegten Ordner in den aktuell ausgewählten Ordner kopieren

  • hi, ich möchte den Ordner: E:\Info\#Im in den Ordner kopieren, den ich aktuell angewählt habe. Der Inhalt vom Ordner E:\Info\#Im soll natürlich mit kopiert werden. Und falls im aktuell ausgewählem Ordner bereits ein Ordner #Im existiert soll dessen Inhalt nur überschrieben werden mit den Dateien die noch fehlen im Vergleich zum Quellordnerinhalt: E:\Info\#Im. Das ganze soll mit dem hotkey strg+alt+g passieren. So klappt es schonmal nicht ;):

    Wie geht das richtig?

    Einmal editiert, zuletzt von SOLVE-SMART (7. März 2025 um 00:54)

  • Hi und willkommen im Forum o0Julia0o 👋 .

    [...] ich möchte den Ordner: E:\Info\#Im in den Ordner kopieren, den ich aktuell angewählt habe [...]

    Was meinst du mit aktuell angewählt? Sprichst du vom Windows Explorer den du offen hast?
    Dort bist du mit der Maus auf irgend einem Ordner und möchtest in diesen per Hotkey den "#Im" Ordner samt Inhalt kopieren?
    Richtig soweit? Denn so etwa sieht dein Code (KI generiert sicherlich) aus.

    Aber warum 🤔 ? Weißt du nicht sowieso von welchen Ordner du in welchen Ordner kopieren möchtest? Also ich verstehe nicht was dir das Skript bringt, wenn du einfach per Windows Explorer copy und paste genau dies auch machen kannst? Da wirst du doch gefragt ob du die bereits vorhandenen Dateien überschreiben willst oder nicht.

    Mal anders gefragt:
    Wie häufig möchtest du dies etwa ausführen, für wie viel verschiedene Ordner (sonst brauchst du den Hotkey ja auch nicht)?

    💡 Wenn du mehr Informationen teilst, was dein Ziel insgesamt ist, kann es sehr gut möglich sein, dass wir einen ganz anderen Vorschlag bringen können, an den du ggf. noch nicht gedacht hast. Deinen Code reviewe ich jetzt (in der Nacht) nicht mehr. Morgen früh gegebenenfalls.

    Viele Grüße
    Sven

  • Um dein Szenario für mich und die anderen etwas besser nachzustellen und testen zu können, hier ein kleines Skript was eine ähnliche Ordnerstruktur mit dummy Daten/Dateien anlegt. Wenn wir von der gleichen Struktur ausgehen, wird es einfacher konkret darüber zu reden ob das finale Skript/Programm sich so verhält wie du es dir dann vorstellst.

    Das Ergebnis sieht dann so aus:

    Viele Grüße
    Sven

  • Auch möchte ich hier nochmal (auch wenn autoit das gerne "intern" korrigiert) darauf hinweisen das in deinem Programm eine Vermischung von Local und Global variablen passiert und keine saubere Zuweisung vorhanden ist.

    Zudem ist die "simulierung des Tastendrucks Strg+C vollkommen unnötig (sollte man aus dem Handle holen) und nur weil man ein Fenster selektiert hat, heißt das nicht, das man die Adresszeile ausgewählt hat, was in deinem Code bedeutet das Strg+C entweder leer ist oder ganz was anderes enthält und zusätzlich auch noch ggf. für den User wichtiges in der Zwischenablage überschreibt.

    Auch noch was hinzuzufügen, das DirCreate kann Filecopy auch (siehe Hilfe).
    Daher würde mein aktueller Ansatz so aussehen (Bin auf W11 und bekomme aber immer nur den 1. OrdnerTab raus, nicht den gerade aktiven, ggf. kann da wer anders ansetzen der das besser kann ;):(

    2 Mal editiert, zuletzt von Moombas (7. März 2025 um 10:38)

  • Ich habe mein Skript nochmal angepasst, da der Ordnername des aktiven Tab im Titel angezeigt wird, nehme ich das als Referenz um den richtigen Ordner zu bekommen. Das kopieren an sich ist hierbei noch ungetestet.

  • Hi und willkommen im Forum o0Julia0o 👋 .

    Was meinst du mit aktuell angewählt? Sprichst du vom Windows Explorer den du offen hast?
    Dort bist du mit der Maus auf irgend einem Ordner und möchtest in diesen per Hotkey den "#Im" Ordner samt Inhalt kopieren?
    Richtig soweit? Denn so etwa sieht dein Code (KI generiert sicherlich) aus.

    Aber warum 🤔 ? Weißt du nicht sowieso von welchen Ordner du in welchen Ordner kopieren möchtest? Also ich verstehe nicht was dir das Skript bringt, wenn du einfach per Windows Explorer copy und paste genau dies auch machen kannst? Da wirst du doch gefragt ob du die bereits vorhandenen Dateien überschreiben willst oder nicht.

    Mal anders gefragt:
    Wie häufig möchtest du dies etwa ausführen, für wie viel verschiedene Ordner (sonst brauchst du den Hotkey ja auch nicht)?

    Ja exakt. Den Ordner wo ich mit der Maus im Windows Explorer gerade reingeklickt habe. Dann drücke ich den shortcut und der Ordner wird mir kopiert. Ich kenne den Ort wovon ich kopieren möchte, aber ich muss dann nicht erst dorthin navigieren und den Ordner markieren und kopieren auswählen. Es spart halt viel Zeit, da das öfter vorkokmmt. Ich starte das script dann, per compilierter script-exe. Und danach nutze ich das dann halt häufig. Aber zwischendrin landen andere Dinge in der Zwischenablage. Daher der Hotkey. Und vielen Dank. Ich habe nur Mittagspause, wollte nur eben schonmal antworten.

  • Danke! Habe es jetzt mal ausgeteste und es passiert einfach nichts, wenn ich strg + alt + g drücke. Und der Quellpfad ist vorhanden und er enthält auch Dateien: E:\Info\#Im


    Ich habe es aus AutoIt und mit compilierter exe probiert. Ich wähle einen Ordner an und drücke den Shortcut. Nichts passiert.

  • o0Julia0o im Skript von Moombas steht:

    AutoIt
    ; Setze den Hotkey Strg + G, da Strg+Alt+G bei mir nicht funktionierte
    HotKeySet('^g', "CopyFilesHotkey")

    ----------------------------

    Ansonsten: Wenn ich intensiver darüber nachdenken würde, würde ich es sehr wahrscheinlich anders machen 😅 . Doch du hast eine spezifischen Anforderung beschrieben, die nicht generisch sein muss (im Moment), daher folgt ein kleines Beispiel welches funktioniert.

    Doch zunächst zu deinen Ansatz Moombas :
    Ich habe ihn nur kurz getestet ohne zu analysieren und es klappt leider nicht. Es stimmt was mit FileCopy() nicht. Des Weiteren berücksichtigst du (glaube ich) nicht, dass die vorhandenen Dateien im Zielordner nicht überschrieben werden sollen. Wenn du allerdings die Flags dazu weg lässt, wird gar nichts kopiert. Teste gern mal ausführlich - gern auch mit dem Testdaten Skript von mir oben, wenn du magst.

    💡 Das folgende sollte dem entsprechen o0Julia0o wie du es beschrieben hast:

    Testing (reproduction steps):

    1. Führe das Testdaten-Skript (Ordner- und Dateistruktur erstellen) oben aus.
    2. Navigiere im Windows Explorer nach C:\tmp\target-folder\#Im\subfolder1.
    3. Bearbeite dort fileA.txt in dem du den "dummy content" einfach durch einen anderen Text ersetzt. Datei speichern.
    4. Navigiere im Windows Explorer nach C:\tmp\target-folder.
    5. Selektiere den Ordner mit einen Klick.
    6. Drücke Tastenkombi. STRG+ALT+G.
    7. Schaue dir den Ordner C:\tmp\target-folder\#Im genau an. Es sollten statt "3 Dateien, 2 Ordner" nun "9 Dateien, 2 Ordner" in den Ordnereigenschaften zu sehen sein.
    8. Schaue dir die bearbeitete Datei an, diese hat deinen neuen Text und wurde nicht überschrieben.

    Ich habe bewusst nicht mit FileCopy() gearbeitet, da es in keiner meiner Konstellationen für genau das beschriebene Szenario funktioniert hat. Auch DirCopy() half nicht. Somit bin ich auf's gute alte "robocopy" was seit Windows Vista (glaube ich) Standard ist, ausgewichen.

    Viele Grüße
    Sven

    ----------------------------

    Update1:
    Es wird bewusst kein intensives error handling gemacht und auch keine UNC-Pfade berücksichtigt (kleiner lieber "wink" an AspirinJunkie 😚 😂), da ich davon ausgehe, dass einmalig im Windows Explorer auf den Zielordner geklickt wird und dann der HotKey getriggert wird. Daher meine Einschätzung das es nicht generisch bzw. robuster sein muss.

    Update 2:
    Das man das Ergebnis von robocopy auswerten und ggf. berücksichtigen sollte (Fehler beim kopieren), wäre ein sinnvolles TODO 🤝 .

  • (kleiner lieber "wink" an AspirinJunkie 😚 😂),

    Naja da ich schonmal angesprochen wurde, hab ich mir dann doch schon bisschen Gedanken gemacht darüber.
    Mir ist dabei vor allem der Aspekt aufgestoßen, dass das Erkennen der aktuell ausgewählten Ordner evtl. etwas wacklig sein könnte.
    Nun ist es jedoch so, dass man die ausgewählten Dateien eines Explorerfensters auch robust ermitteln kann.

    Vielleicht könnt ihr daher ja folgendes zumindest als Grundkonstrukt verwenden?:

    Das kann man natürlich noch erweitern indem man die Windows-Handles zurückgibt um Herauszufinden, welches Explorerfenster ganz oben steht (also das letzte geöffnete) usw.

    1. Drücke Tastenkombi. STRG+ALT+G.
    2. Schaue dir den Ordner C:\tmp\target-folder\#Im genau an. Es sollten statt "3 Dateien, 2 Ordner" nun "9 Dateien, 2 Ordner" in den Ordnereigenschaften zu sehen sein.
    3. Schaue dir die bearbeitete Datei an, diese hat deinen neuen Text und wurde nicht überschrieben.

    Danke! Ich habe die ganzen Schritte so ausgeführt. Also Strg + G sollte ja reichen. Nein, es bleibt bei 3 Dateien, 2 Ordner. Der Text wurde nicht überschrieben.

    Aber es liegt daran, dass nichts geschrieben wurde, sehe ich ja an dem Ordnerdatum.

    Den Ordner, wo der #Im-Ordner hineinkopiert werden soll, dort habe ich mit der linken Maustaste einmal hineingeklickt oder bin dort hineingetabbt. Also nicht auf die URL oder den Ordnernamen an sich(habe ich auch mal testweise gemacht, tat ber auch nicht).


    Wenn kein #Im-Ordner vorhanden ist, soll dieser halt erstellt werden bzw. ja vom Quellordner genommen werden. Im #Im-Ornder soll nichts überschrieben werden. Nur ergäntzt, was im Quell-#Im-Ordner vorhanden ist und im Ziel-#Im-Ornder nicht.

    Einmal editiert, zuletzt von o0Julia0o (7. März 2025 um 20:34)

  • o0Julia0o bitte schaue dir dies kurz an. Ich hoffe es ist verständlich und du kannst mich danach aufklären ob ich dich einfach falsch verstanden habe, wir aneinander vorbei reden/schreiben oder ob du es dir anders vorgestellt hast?

    🎬 Erklärungs-Video

    Danke und viele Grüße
    Sven

  • wow, danke Dir! Also ja, genau so soll es stattfinden. Habe ich auch so probiert. Hat nicht funktioniert. Wobei ich grundsätzlich lieber in den Ornder klicke mit der Maus, und nicht auf den Ordnernamen. Habe es nochmal getestet, jetzt funktioniert es bei Klick auf den Ordnernamen. Aber ich möchte ja in das Fenster klicken, das ist im Alltag deutlich schneller und einfacher:

    Einmal editiert, zuletzt von o0Julia0o (7. März 2025 um 22:12)

  • was nutzt du da für ein Tool überhaupt, wo man unten sehen kann, Output, debugging, terminal?


    Ich kann nicht unter Bildern Text schreiben, daher neuer Post. Jetzt funktioniert das auch, wenn ich einfach in den Zielordner geklickt habe. Supi! :) freu!

    Vermutlich hatte ich das Script nicht aktiv? Sobald man auf das icon rechts- oder linksklickt kommt das rote Symbol blinkend, dass das Scritp nicht aktiv ist. Das Häkchen davor spielt aber keine Rolle. Von daher komme ich damit immer durcheinander, ob ein Script gerade aktiv ist oder nicht.

    Einmal editiert, zuletzt von o0Julia0o (7. März 2025 um 22:16)

  • Morgen oder am Montag gern mehr Details (zum Tooling usw.) - ich bin gleich offline.

    Auf deine Frage mit "im Ordner sein" und dann den HotKey auslösen:
    Schau dir bitte die Antworten von Moombas und AspirinJunkie an und versuche zu verstehen was getan wird. Ansonsten einfach weiter so - immer fragen 😅 .

    Viele Grüße
    Sven

  • Danke! Vielleicht kannste das auch noch am Montag beantworten:

    Code
     If @error Or Not IsArray($aFolderMatch)

    bedeutet, wenn er den Quellordner nicht findet. Aber die Then-Sache wird gar nicht ausgeführt, wenn ich eine Messagebox so ergänze:

    Code
    Local Const $aFolderMatch = StringRegExp($sSourceFolder, "([^\\]+)$", 1)
       If @error Or Not IsArray($aFolderMatch) Then
           ConsoleWrite('Oops! Handle this unexpected behavior.' & @CRLF)
        MsgBox(0, "Fehler", "Der Quellordner existiert nicht: " & $sourceFolder)
           Return

    Das mit dem Ordner auswählen klappt nicht wirklich zuverässig. Ich muss oft den Ordnernamen angklicken, damit es klappt. Also den targed-folder. Wenn ich IN den targed-folder klicke, klappt das script nur selten. Wobei ich genau das eigentlich nur so nutze. Habe es gerade >20x hintereinander probiert. Klappt nicht.

    2 Mal editiert, zuletzt von o0Julia0o (8. März 2025 um 10:34)

  • Nein, so wie im Erklärvideo gezeigt und gesagt: meine Variante funktioniert nur, wenn du einen Ordner angeklickt hast und dann die Tastenkombi. drückst. Es wird dann der Ordner Pfad in die Zwischenablage kopiert und dann läuft alles super.

    Das es bei dir gestern einmal geklappt hat, als du einfach im Ordner auf eine Freifläche geklickt hast liegt mit Sicherheit daran, dass der Ordnerpfad noch in der Zwischenablage war und es daher zufällig geklappt hat.

    Daher schrieb ich auch schaue dir bitte die beiden anderen Vorschläge an, denn da wird der Ordnerpfad anders ermitteln.

    Viele Grüße
    Sven

  • Tritt dem AutoIt Community Projects-Discord-Server bei!
    Your space to collaborate (in english or german) with other AutoIt enthusiast regarding shared projects and more. | 20 Mitglieder
    discord.gg

    Komme gern auf den Discord Server, denn da könnte ich per Audio-Call oder sogar per Video-Call einfacher erklären was du tun müsstest damit es so klappt wie du es dir erhoffst.

    Es ist zwar alles bereits da (hier geschrieben/vorgeschlagen worden), doch du stehst mit AutoIt noch recht am Anfang, habe ich das Gefühl o0Julia0o .

  • Mit diesem Skript o0Julia0o (Abwandlung von Moombas Vorschlag), kannst du deine Tastenkombi. (STRG+ALT+G im Moment) direkt im Ordner anwählen und es funktioniert. Du musst nicht wie in der anderen Variante von mir, den Zielordner anklicken sondern einfach darin sein und los geht's.

    💡 Ich habe nun auch die ConsoleWrite() Aufrufe durch MsgBox() Aufrufe ersetzt, weil du schriebst du wirst das kleine Tool (Skript/Programm) als *.exe kompilieren.

    ----------------------------

    Nichts destotrotz könnte ich mir vorstellen, dass du weitere Fragen haben wirst, daher meine Empfehlung: Discord Server und somit Live Hilfe (wenn man eine Zeit entsprechend ausmacht).

    Viele Grüße
    Sven

  • Wow, genauso hatte ich mir das vorgestellt. Jetzt läuft es perfekt. Und ja genau, die Consolenauskunft hilft mir nicht so viel als Exe. Nochmals vielen Dank SOLVE-SMART!

  • Dann brauch ich meins ja nicht weiter prüfen ;)
    Wo da nun bei mir der #Fehler lag schaue ich mir ggf. später nochmal an, denn zumindest bei mir hatte zumindest es geklappt, den Pfad des aktiven Ordners zu bekommen, das kopieren hatte ich dann nicht mehr geprüft. Aber SOLVE-SMART :

    "Des Weiteren berücksichtigst du (glaube ich) nicht, dass die vorhandenen Dateien im Zielordner nicht überschrieben werden sollen."

    Da habe ich seine Vorlage genommen: FileCopy($sourceFolder, $targetImFolder, 1)    ; 1 = Überschreibe, wenn der Ordner bereits existiert
    Daher bin ich auch wegen dem Kommentar davon ausgegangen das es Überschreiben soll.