Batch Fortschrittsanzeige von Robocopy-Backup

Honkus

Ensign
Registriert
Juli 2012
Beiträge
207
Hallo :)

ich bin zur Zeit dabei, ein Batch-Script für ein Backup mehrerer Ordner zu schreiben.
Es funktioniert soweit auch wunderbar mit robocopy.
Jetzt würde ich allerdings noch gerne eine Gesamtfortschrittsanzeige jedes einzelnen robocopy-Jobs in der Konsole oder Titelleiste anzeigen lassen (robocopy zeigt standardmäßig nur den Fortschritt jeder einzelnen Datei an).

Meine Frage: Ist es mit robocopy möglich, sich den fortlaufenden Fortschritt (Prozentanzeige, Ladebalken etc.) des Jobs oder sogar den Gesamtfortschritt der Batch (in der Konsole und/oder Titelleiste, NICHT Textfile) anzeigen zu lassen?
Wenn nicht, gibt es einen (möglichst kostenfreien) Kopierbefehl, der das kann?

Hier noch der (relevante) Code:
Code:
set variables=/E /ETA /ns /nc /nfl /ndl /NJH /R:5 /TEE /V /W:1
robocopy "C:\Users\Honkus\Documents" "E:\Dokumente" %variables%
robocopy "C:\Users\Honkus\Desktop\Blubb" "E:\Desktop\Blubb" %variables%
...

Die Lösungen die Google ausspuckt, funktionieren bei mir nicht, mangels Verständnis bring ich die auch nicht dazu... (bin ein Batch-Grünschnabel :baby_alt:)
Beispiel:
Lösung1
Lösung2 (für den Gesamtfortschritt der Batch)

Vielen, vielen Dank im Voraus!
Grüße,
Honkus
 
Ich kenne mich nur in der Bash wirklich gut aus, weshalb ich dir nur das Vorgehen beschrieben kann, aber evtl. hilft dir das ja schon weiter, da man sich die einzelnen Schritte sicher ergooglen kann.
  1. Die Größe aller zu kopierenden Dateien summieren (einfach: nur Anzahl der Dateien)
    • Variable anlegen (zB $overall)
    • rekursiv durch den Verzeichnisbaum laufen und die Größe von jeder Datei auf deine Variable addieren
  2. Während des Kopierens Größe der bereits kopierten Dateien summieren
    • Variable anlegen (zB $copied)
    • erneut über den Verzeichnisbaum laufen; für jede $datei:
      • $copied = $copied + Größe $datei (bzw. $copied++ wenn man oben nur Anzahl gezählt hat)
      • robocopy $datei
      • echo $copied*100/$overall

Das ist so der ungefähre Bauplan der mir jetzt spontan in den Sinn kommt.

Eins noch. Wenn du sowieso noch keine Ahnung von Batch hast, würde ich dir empfehlen gleich die Powershell zu lernen. Die ist wesentlich mächtiger und auf einige Funktionen bin ich sogar als Bash-Fan neidisch.
 
Freezedevil schrieb:
Eins noch. Wenn du sowieso noch keine Ahnung von Batch hast, würde ich dir empfehlen gleich die Powershell zu lernen. Die ist wesentlich mächtiger und auf einige Funktionen bin ich sogar als Bash-Fan neidisch.
Ist mir leider jetz nicht möglich, das Script soll auf nem Standard WinXP-Rechner laufen, an dem ich nicht viel ändern kann.

Funart schrieb:
Willst du es selbst schreiben, falls nicht verwend doch SyncToy.
Ergibt sich aus dem ^, ich kann/soll an dem Rechner leider nicht viel ändern.

Freezedevil schrieb:
Ich kenne mich nur in der Bash wirklich gut aus, weshalb ich dir nur das Vorgehen beschrieben kann, aber evtl. hilft dir das ja schon weiter, da man sich die einzelnen Schritte sicher ergooglen kann.
  1. Die Größe aller zu kopierenden Dateien summieren (einfach: nur Anzahl der Dateien)
    • Variable anlegen (zB $overall)
    • rekursiv durch den Verzeichnisbaum laufen und die Größe von jeder Datei auf deine Variable addieren
  2. Während des Kopierens Größe der bereits kopierten Dateien summieren
    • Variable anlegen (zB $copied)
    • erneut über den Verzeichnisbaum laufen; für jede $datei:
      • $copied = $copied + Größe $datei (bzw. $copied++ wenn man oben nur Anzahl gezählt hat)
      • robocopy $datei
      • echo $copied*100/$overall

Das ist so der ungefähre Bauplan der mir jetzt spontan in den Sinn kommt.
Vielen Dank dafür schonmal!!
Da seh ich aber ein Problem für Batch und zwar einen Befehl (Größe abfragen, $copied beschreiben) WÄHREND eines anderen Befehls (Kopieren, robocopy) auszuführen.
Gibts da ein Workaround?

Grüße,
Honkus
 
Ich meinte, dass du noch einmal über den Verzeichnisbaum läufst und dann für jede Datei robocopy aufrufst anstatt einmal einen kompletten Ordner anzugeben. Das läuft dann praktisch nach dem Schema:
  1. nächste Datei holen
  2. robocopy dieser Datei
  3. Größe der Datei aufsummieren
  4. zurück zu 1

Das ist leider nötig, da du sonst, wie du richtig erkannst hast, nicht feststellen kannst welche Dateien bereits kopiert sind. Zumindest sehe ich auch keinen Weg.
 
Ah, jetz seh ichs auch ^^ Sorry fürs ungenaue Lesen
Super Idee, hatte so das typische Facepalm-Gefühl als ichs gelesen hab... dass ich da nich drauf gekommen bin... ^^
Jetz darf ich mich nur noch n bisschen über Schleifen schlaumachen und rumprobieren dann schaff ich das :)
Vielen, vielen Dank!:daumen:
 
Zuletzt bearbeitet:
Zurück
Oben