Kopiertool

  • Hallo Freunde der Programmierkunst!

    Ich bin auf der Suche nach einem kleinen Kopiertool.

    Es soll folgendes können und so aussehen:

    So ist das Bild, wenn Computer 1 angehakt ist.

    Datenaustausch

    O Laptop 1 O Laptop 2 O Laptop 3

    (Icon DektopPC) (Icon Laptop)

    *Eingabe* Source 4 -> Dest 1

    Dest 4 <- Source 1 *Eingabe (entspricht Dest 1)*

    Jetzt das Bild, wenn Computer 2 angehakt ist:

    Datenaustausch

    O Laptop 1 O Laptop 2 O Laptop 3

    (Icon DektopPC) (Icon Laptop)

    Source 4 -> Dest 2

    Dest 4 <- Source 2 *(entspricht Dest 2)*

    und bei Computer 3:

    Datenaustausch

    O Laptop 1 O Laptop 2 O Laptop 3

    (Icon DektopPC) (Icon Laptop)

    Source 4 -> Dest 3

    Dest 4 <- Source 3 *(entspricht Dest 3)*

    [Blockierte Grafik: https://picload.org/view/dcowwrcr/unbenannt.jpg.html]

    Bei Beispiel 1:

    Aussendienstler 1 muss Dateien auf seinen Aussendienstrechner übertragen. Laptop 1 ist angehakt.

    Bei der Eingabe von z. Bsp. 17D005 soll ein kompletter Ordner Berechnungen aus dem Pfad F:\Dokumente\2017\17D005\ auf den Laptop 1 in \\Laptop1\Daten\17D005\ kopiert werden.

    Abends kommt der Aussendienstler rein und muss seine Daten zurück übertragen.

    Er schaut, ob Laptop 1 angehakt ist (eventl. farblich unterlegt?).

    Dann gibt er 17D005 in Source1 ein. Nun wird der Ordner Berechnungen von \\Laptop1\Daten\17D005\ nach F:\Dokumente\Aussendienst\2017\17D005\ kopiert.

    Das Programm ist auf 3 Aussendienstmitarbeiter und 3 Laptops ausgelegt.

    Wäre jemand bereit, dies für mich umzusetzen?

    Ich hatte vor1 1/2 Jahren schon einmal eine ähnliche Anfrage gestellt. Nun haben sich die Voraussetzungen etwas geändert.

    Vielen Dank schon einmal!

    EDIT BugFix: Ich habe mal etwas formatiert und Unmengen an Leerzeilen entfernt - sollte jetzt deutlicher lesbar sein.

    @TS - Bitte im Post mit Leerzeilen sparsam umgehen, mehr mit Formatierung (Style, Font, Liste etc. arbeiten), das verbessert die Lesbarkeit

    3 Mal editiert, zuletzt von BugFix (27. November 2018 um 09:32) aus folgendem Grund: Bild hinzugefügt

  • Hallo,

    ich habe jetzt schon einmal die GUI,fehlt noch das eigentliche kopieren.

  • Hallo Kayes,

    Ich schmeiße Dir einfach mal ein altes (und sicher verbesserungsfähiges) Script von mir vor die Füße, das damals unter Mithilfe mehrerer User dieses Forums entspanden ist.

    Vermutlich enthält es genügend Anregungen, anhand derer Du Dein Problem selbst gelöst bekommst.

    Ich code, also bin ich!

  • Mal einen Schritt nach dem nächsten:

    Ich beschäftige mich also erst einmal mit If Then.

    Die Abfrage der Radios

    Code
    GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")
    $rechner1 = GUICtrlCreateRadio("Rechner 1", 40, 16, 140, 40)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)
    $rechner2 = GUICtrlCreateRadio("Rechner 2", 240, 16, 140, 40)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")
    $rechner3 = GUICtrlCreateRadio("Rechner 3", 432, 16, 140, 40)
    GUICtrlSetFont(-1, 14, 400, 0, "MS Sans Serif")

    Das gewählte Radio erhält den Wert 1, oder irre ich mich?

    Dann wäre:

    Code
       If GuiCtrlRead($Rechner1) = 1 Then $source = varsource1
       ElseIf GuiCtrlRead($Rechner1) = 1 Then $destin = $vardestin1
       ElseIf GuiCtrlRead($Rechner2) = 1 Then $source = $varsource2
       ElseIf GuiCtrlRead($Rechner2) = 1 Then $destin = $vardestin2
       ElseIf GuiCtrlRead($Rechner3) = 1 Then $source = $varsource3
       ElseIf GuiCtrlRead($Rechner3) = 1 Then $destin = $vardestin3
       EndIf

    Ziel ist es, einer lokalen Variablen den Wert der Globalen zu geben.

    Dies ist also der Auswahlteil. Wenn ich den komplett habe werde ich mich mit dem Kopierteil beschäftigen.

    Hier das ganze Script:

    Und so soll die GUI aussehen:

    [Blockierte Grafik: https://picload.org/view/dccgaodo/kopiertool.jpg.html]

    Einmal editiert, zuletzt von kayes (14. Dezember 2018 um 19:22)

  • So ist der momentane Stand.

    Ob es funktioniert wenn ich den richtigen Kopierbefehl habe ist wieder was anderes :)

    • Offizieller Beitrag

    So wird es nicht funktionieren, dein If-Then-Else-Statement ist so nicht möglich.

    Es wäre hier auch besser Arrays zu verwenden.

    Ungetestet:

  • Danke BugFix,

    aber so läuft es auch nicht durch.

    Code
       Global $aSourceDest[4][2] = [
        ["F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\"],
        ["F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\"],
        ["F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\"],
        ["F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\%jjjj%\%projekt%\Berechnungen\*"],
        ["F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\Aussendienst\%jjjj%\%projekt%\Berechnungen\"]]  

    Darin steckt noch eine fehlerhafte Dimensonierung.

  • Darin steckt noch eine fehlerhafte Dimensionierung.

    Das Problem ist die Zuweisung der Elemente zum Array $aSourceDest .

    Kopierst Du den Code von BugFix in deinen SciTE Editor, dann werden diese Elemente als eigenständige Zeilen behandelt (ggf. Folge der z.Zt. noch fehlenden AutoIt-Syntax im Forum :/ ).

    Du kannst Sie zu einer Zeile zusammenziehen, oder mit _ (Unterstrich) die Zeilen verbinden - das wäre auch etwas übersichtlicher (siehe Teilcode).

    Binde zusätzlich an den Anfang des Skriptes <Array.au3> ein, dann kannst Du Dir das Array anzeigen lassen. Teilcode :

    Code
    #include <Array.au3>
    
    Global $aSourceDest[4][2] = [ ["F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\"], _
                                  ["F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\"], _
                                  ["F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\"], _
                                  ["F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\%jjjj%\%projekt%\Berechnungen\*", "F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\Aussendienst\%jjjj%\%projekt%\Berechnungen\"]]
    
    ; Nur zur Anzeige :
    _ArrayDisplay($aSourceDest, "Verzeichnisse", Default, Default, Default,"Sourcepath|Destinationpath")

    Gruß Musashi

    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 (16. Dezember 2018 um 17:21)

  • Es kommt immer noch eine Fehlermeldung Musashi,

    Zitat

    ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

    Global $aSourceDest[4][2] = [ ["F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\"], ["F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\"], ["F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\"],["F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\%jjjj%\%projekt%\Berechnungen\*"], ["F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\Aussendienst\%jjjj%\%projekt%\Berechnungen\"]]

    Global $aSourceDest[4][2] = [ ["F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\"], ["F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\"], ["F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\"],["F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\%jjjj%\%projekt%\Berechnungen\*"], [^ ERROR

    liegt es an der [4][2] ?

  • Probiere bitte mal mein Beispiel aus Beitrag #10 aus. Beim ArrayDisplay werden zwar nur die Pfade angezeigt, aber es ist in sich lauffähig. Was kommt dabei heraus ?

    Gruß Musashi

    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."

  • Es kommt dabei eine Tabelle raus, in der alles Richtig dargestellt ist.

    Ok, ein Array generiert mir quasi eine Tabelle mit Variableninhalten.

    Wie picke ich mir jetzt einen Wert raus?

  • Das Skript dürfte nicht laufen, da dein SourceDest größer als 4 in den Zeilen ist, deshalb der Fehler.

    Stimmt, ich dachte er hätte mein Beispiel genommen !

    kayes :

    Bei der Zuweisung hast Du 5 Elemente genommen, davon teilweise nur den ersten Teil.

    Wie picke ich mir jetzt einen Wert raus?

    Lasse bitte mal folgendes Skript laufen :

    Gruß Musashi

    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."

  • Ach ja, die Dimension des Arrays kannst Du Dir wie folgt anzeigen lassen :

    Code
    ConsoleWrite('< Anzahl Zeilen      = ' & UBound($aSourceDest, $UBOUND_ROWS) & @CRLF)
    ConsoleWrite('< Anzahl Spalten     = ' & UBound($aSourceDest, $UBOUND_COLUMNS) & @CRLF)
    ConsoleWrite('< Anzahl Dimensionen = ' & UBound($aSourceDest, $UBOUND_DIMENSIONS) & @CRLF)

    Ich denke Dein Fehler ist dadurch entstanden, dass Du bei einer Zuweisung 2 Elemente erzeugt hast.

    Das kann man bei Deinen Pfadkonstrukten schnell übersehen, daher mache die Zuweisung doch lieber, wie in meinem Beispiel beschrieben, mit Unterstrich - nicht als Einzeiler :P.

    Gruß Musashi

    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."

  • nein, die Werte werden mir richtig angezeigt.

    Row 4 Sourcepath stimmt nicht, das muss Row 3 Destinationpath sein, also:

    Code
    Global $aSourceDest = [ ["F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\"],["F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\"],["F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\"],["F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\%jjjj%\%projekt%\Berechnungen\*", "F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\Aussendienst\%jjjj%\%projekt%\Berechnungen\"]]
  • Dann müsste es in meinem Script jetzt so aussehen.

    Was fehlt dürften noch die beiden Kopierbefehle an sich sein:

  • Row 4 Sourcepath stimmt nicht, das muss Row 3 Destinationpath sein, also:

    Genau das habe ich Dir doch gesagt :

    Ich denke Dein Fehler ist dadurch entstanden, dass Du bei einer Zuweisung 2 Elemente erzeugt hast.

    Das kann man bei Deinen Pfadkonstrukten schnell übersehen, daher mache die Zuweisung doch lieber, wie in meinem Beispiel beschrieben, mit Unterstrich - nicht als Einzeiler

    Die Array-Zuweisung aus der Fehlermeldung in Deinem Beitrag #11 ergibt :

    Code
    + ------------ Pfade ------------------------ 
    + Source1 = F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\*   Destination1 = F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\
    + Source2 = F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\*   Destination2 = F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\
    + Source3 = F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\*   Destination3 = F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\
    + Source4 = F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\%jjjj%\%projekt%\Berechnungen\*   Destination4 = 
    + Source5 = F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\Aussendienst\%jjjj%\%projekt%\Berechnungen\   Destination5 = 
    
    < Anzahl Zeilen      = 5
    < Anzahl Spalten     = 2
    < Anzahl Dimensionen = 2

    In Beitrag #17 hast Du das jetzt richtig gemacht;).

    Gruß Musashi

    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."

  • Dann müsste es in meinem Script jetzt so aussehen.

    Nein !

    Du hast wieder Fehler bei der Klammersetzung in der Zuweisung, und damit 5 Elemente :

    Code
    < Anzahl Zeilen      = 5
    < Anzahl Spalten     = 2
    < Anzahl Dimensionen = 2

    Nehme doch bitte die Variante, bei der Du die Zuweisung mehrzeilig mit _ (Unterstrich) verbindest, das ist wirklich übersichtlicher :!:

    Code
    Global $aSourceDest = [ ["F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER1\Daten\%jjjj%\%projekt%\"], _
                            ["F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER2\Daten\%jjjj%\%projekt%\"], _
                            ["F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\*", "F:\TESTUMGEBUNG\RECHNER3\Daten\%jjjj%\%projekt%\"], _
                            ["F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\%jjjj%\%projekt%\Berechnungen\*", "F:\TESTUMGEBUNG\SERVER\Daten\Dokumente\Aussendienst\%jjjj%\%projekt%\Berechnungen\"]]

    Gruß Musashi

    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."