Progressbar

  • Hallo zusammen,

    wie oben genannt, handelt es sich bei diesem Thema um die Progressbar.

    Wie kann ich mir den Fortschritt eines Filecopy / FileMove in der Progressbar anzeigen lassen.

    Vorab: Ja ich habe schon in Google gesucht. Nur leider bin ich aus den gefundenen Ergebnissen nicht schlau geworden.

    Meine Frage. Hat jemand ein ganz simples Script, was mir den Fortschritt eines Prozesses in der Progressbar anzeigt? Oder hat jemand Zeit und Lust mir das mal zu erklären?

    LG Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Hallo Mikki

    Den Fortschritt beim Kopieren einer Datei, oder mehreren?

    Im Fall von einer Datei. Schau mal in die UDF _FileCopyEx von Oscar hier.

    Bei mehrerren Dateien machst du das wohl in einer Schleife. Da brauchst du nur nach jedem Kopiervorgang die Progressbar aktualisieren.

    Grüße autoiter

    • Offizieller Beitrag

    Ja, meine UDF (_FileCopyEx) kann einzelne oder mehrere Dateien kopieren (mit Progressbar).

    Sie basiert im Prinzip darauf, dass man nicht FileCopy benutzt, sondern die Datei mittels FileOpen/FileRead stückchenweise einliest und dann mit FileWrite stückchenweise schreibt.

    So kann man den Fortschritt überwachen und währenddessen eine Progressbar befüllen.

    • Offizieller Beitrag

    Eventuell macht es Sinn deine UDF auf _CopyFileEx() umzustellen.

    Damit werden Dateien über eine API-Funktion kopiert, welche regelmäßig per Callback den aktuellen Stand zurückgibt.


    Vielleicht wäre das ja was für dich.

    Damit hatte ich schon mal rumgespielt. Ist aber schon eine Weile her.

    Das Problem dabei war, dass sich das Script irgendwann "aufgehängt" hat. Irgendwas mit dem Callback war da das Problem (evtl. Laufzeitprobleme, also, dass die Callback-Funktion zu lange brauchte?).

    Jedenfalls hatte ich die Variante dann aufgegeben. Die UDF (Link oben) funktioniert aber recht gut. Es werden unterschiedliche Buffergrößen benutzt (512KB bei Dateien <16MB und 8MB bei größeren Dateien).

    Das hatte ich damals so testweise ermittelt, damit klappt das kopieren recht schnell (kein großer Unterschied zu FileCopy).

  • Hallo!

    Um die Frage Mikki zu beantworten: Ja, das geht mit Robocopy und einem Progressbar!

    Man muss nur Robocopy die Parameter so einstellen das er in der Console nur mehr die Prozentangabe ausgibt:

    Code
    $pid = run(@ComSpec & " /c robocopy  /NDL /NJH /NJS /NS /NC /w:5 /r:5 " & $parameter , "", @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

    Bei der Varable $Parameter werden die Quelleverzeichnis, Zielverzeichnis oder Dateinamen angegben - so wie in der Console halt auch. Es können auch noch weitere Parameter mitgegeben werden!

    Wenn du jetzt den Output der Console einliest bekommst Du nur die % - Zahlen. Beispiel:

    In einer Schleife noch ein bißchen den Prozess überwachen ($pid) und schon klappt das mit Robocopy!

    lg

    Racer