Autoit wartet ?

  • Eigentlich trau ich mich nicht fragen, man könnte es wohl auch ausprobieren, aber bitte was macht ein autoit Script wenn z.B. 100 Dateien übers LAN kopiert werden mit der nächsten Befehlszeile? Warten bis der Kopierbefehl erledigt ist? (Dateiauswahl = *.* im Verzeichnis)


    Danke

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • weder noch FileCopy von autoit--

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • Es wird nicht gewartet sondern einfach die nächste Zeile ausgeführt.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hatte ich befürchtet,
    was ist wenn man den Fehlerstatus abfragt? also

    z.B. Local $iCopyStatus = FileCopy($sSourceFilePath,destdie,1) gibt das nur den Erfolg des "Kopieranstosses" wieder oder ist das eine "Fertig Meldung" im Sinne alles auf der PLatte?


    Danke

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

  • 6500 Dateien je ca. 35k von der Platte auf einen USB Stick --> Die Ausführung des Programmes wartet bis die letzte Datei geschrieben ist. Der 3 Zeiler sieht so aus: Programm und ini liegen in einer RAM Disk.

    FileCopy ('C:\Test\*.pdf' , 'V:\*.pdf', 1)
    IniWrite ('F:\test.ini', "10", "fertig", @YEAR & '/' & @MON & '/' & @MDAY & ' ' & @HOUR & ':' & @MIN & ':' & @SEC)
    MsgBox (0, 'Angeblich kopiert ', 'nö')

    Letzte Datei kopiert 08:23:31
    Eintrag ini 08:23:31


    Sofern man den 3 Zeiler erweitert,

    Local $iCopyStatus = FileCopy ('C:\Test\*.pdf' , 'V:\*.pdf', 1)

    do
    Sleep (10)
    until $iCopyStatus = 0

    stellt man fest, dass das Test-Progrämmchen nicht weiter kommt, da $iCopyStatus schon 1 ist, bevor die do Zeile aufgerufen wird und daher nicht mehr 0 werden kann.

    ---> autoit wartet mit der Code Ausführung bis kopieren erledigt ist.


    Gruß

    Peter

    Ps.: Ich lasse das noch ein wenig offen, falls es Kritik am "Ansatz" gibt...

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

    2 Mal editiert, zuletzt von Peter S. Taler (24. Oktober 2016 um 09:36)

  • Kannst auch die UDF von Oscar nehmen, da geht es erst weiter wenn fertig kopiert wurde: _FileCopyEx

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Du kannst doch auch einfach die pdf mit _FileListToArray in ein Array einlesen und dann mit einer For Next Schleife die Kopiervorgänge abarbeiten. Das wären doch auch nur 4, 5 Zeilen.

    Grüße autoiter

    • Offizieller Beitrag

    stellt man fest, dass das Test-Progrämmchen nicht weiter kommt, da $iCopyStatus schon 1 ist, bevor die do Zeile aufgerufen wird und daher nicht mehr 0 werden kann.

    Ich glaube, ihr verwechselt hier etwas Grundlegendes. Der Return von FileCopy ist bei Erfolg = 1 und nur bei Fehler = 0. Im Regelfall wirst du also nie eine 0 erhalten.

    • Offizieller Beitrag

    Es wird nicht gewartet sondern einfach die nächste Zeile ausgeführt.

    Das lese ich jetzt erst.
    @chip - wie kommst du denn auf die Idee? Selbstverständlich wird das Ende der Operation abgewartet, bevor der nächste Befehl abgearbeitet wird.

    Kleines Beweisskript (als Dateien zum Kopieren setzt irgendwas mit zig MB ein)


    Ergebnis:

    Code
    13:15:33.351 Start 1
    13:15:58.848 Result 1: 1
    13:15:58.848 Start 2
    13:16:01.326 Result 2: 1
    13:16:01.326 Ende
  • Kann ich nicht bestätigen @BugFix (größe waren 250 MB):

    Code
    13:29:37.976 Start 1
    13:29:37.976 Result 1: 0
    13:29:37.976 Start 2
    13:29:37.976 Result 2: 0
    13:29:37.976 Ende

    Welche Autoitversion hast du?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Ich probier mal bissel rum. Vielleicht bekomme ich noch raus wie es zu den unterschiedlichen Effekten kommt.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • Offizieller Beitrag

    Könnte an der Version 3.3.14.2 liegen, da wurde FileCopy verändert

    • Added #2665: FileCopy() no longer fails when copying EFS files to destinations that don't support encryption.

    Vielleicht mal wieder was kaputt-optimiert.


    EDIT: Vergiß es, die Änderung war schon bei 0

  • @ BugFix
    Ja, wenn autoit wartet - dann wird das (technischen Erfolg vorausgesetzt) natürlich die Erfolgsmeldung nie 0 - da gebe ich Dir recht. Wenn autoit aber nicht warten würde - dann ist die Operation ja nicht abgeschlossen - also 0? Denn ich gehe davon aus, dass es autoit "wurscht" ist ob die Operation aus technischen Gründen gescheitert ist, oder nicht genug Zeit vergangen ist, weil nicht gewartet wird.

    Ich hatte teilweise auch schon mal die Idee autoit wartet nicht - deshalb der Beitrag. Nachdem ich nun mit ausgesprochen vielen kleinen Files probiert habe - kam ich eigentlich zu dem Schluss autoit wartet.
    Kann es ein Delay aus der Platte sein? Frei nach dem Motto die Platte hat die Daten angenommen aber noch nicht geschrieben? Genau wissen muss man das ja nur wenn man das Kopierergebnis weiterverarbeitet. Also z.B. einige tausend Files in ein Verzeichnis kopieren und danach aus diesen Files ein großes File macht (merge PDF)

    Was nun?

    Kann die Differenz aus folgender Tatsache kommen? Aus der Hilfe:
    ..."Milliseconds value of clock. Range is 000 to 999. The update frequency of this value depends on the timer resolution of the hardware and may not update every millisecond."

    Ich habe heute 1000 Einträge in eine Ini schreiben lassen - so zum Testen .

    For $i = 1 to 1000
    IniWrite ('F:\test.ini', "10", 'start'&$i, @YEAR & '/' & @MON & '/' & @MDAY & ' ' & @HOUR & ':' & @MIN & ':' & @SEC & ':' & @msec)
    Next


    Mit folgendem Ergebnis 1 - 133 Zeit = 10:44:15:453
    aber der Eintrag 134 hat den Zeitstempel 134 - 255 Zeit= 10:44:15:469
    das setzt sich auch so ähnlich fort...

    wie man sieht läuft die Zeit nicht chronologisch ab sondern in Sprüngen.


    Gruß

    Peter

    Hinweise auf Suchmaschinen finde ich überflüssig - wer fragt hat es nicht gefunden oder nicht verstanden. Die Antwort gibt sich oftmals schneller als der Hinweis auf Dr. Goggle & Co.

    Ab 19-10-22 ergänzt um:

    Die Welt wird nicht bedroht von den Menschen, die böse sind, sondern von denen, die das Böse zulassen. (Albert Einstein)

    Einmal editiert, zuletzt von Peter S. Taler (24. Oktober 2016 um 16:52)