Wie kann ich mit dem Fortschritt, der nur auf der Konsole protokolliert wird, robokopieren?

8

Ich möchte RoboCopy ausführen, das die Konsole mit% progress aktualisiert, aber die Protokolldatei nicht mit% progress überfüllt.

Der folgende RoboCopy-Befehl führt die gewünschte Kopie aus und hängt die Protokollinformationen an die Protokolldatei an.

RoboCopy <source> <dest> /log+:<log file> /tee

Das Problem ist, dass die Protokolldatei mit% progress-Updates überfüllt ist. Daher muss ich den Befehl folgendermaßen ändern:

RoboCopy <source> <dest> /log+:<log file> /tee /np

Jetzt ist das Problem, dass ich keine% Fortschrittsaktualisierungen auf dem Bildschirm erhalte.

Ich habe http://technet.microsoft.com/en-us/library/cc733145%28WS.10%29.aspx jetzt einige Male gelesen und kann keine Schalter finden, die ich brauche. Vermisse ich etwas oder ist das, was ich erreichen möchte, nicht möglich?

Tim Murphy
quelle
Müssen Sie nur eingebaute Werkzeuge verwenden?
Hallo71

Antworten:

2

Da dies so lange niemand beantwortet hat, dachte ich, ich würde ein paar Dinge vorschlagen.

Wenn Sie Batch-Skripte verwenden, sollte es nicht zu schwierig sein, sed zu verwenden, um unerwünschte Fortschrittsinformationen aus der Protokolldatei zu entfernen. Ich habe nicht genug Erfahrung damit, um Ihnen eine Lösung zu bieten, ohne etwas Zeit damit zu verbringen.

sedIn UnxUtils gibt es eine einzige EXE-Dateiversion (mit einer etwas aktuelleren Version in der Update-Zip- Datei ).

Eine andere Möglichkeit wäre, XXCOPY anstelle von zu verwenden Robocopy. Es hat eine wirklich lächerliche Anzahl von Schaltern (über 230), mit denen Sie tun können, was Sie wollen. Sie müssen einen ganzen Abend damit verbringen, auszuwählen, welche Sie verwenden möchten. Es gibt auch ein GUI-Fortschrittsdialogfeld, wenn Sie dies bevorzugen.

Es gibt eine kostenlose Version für den persönlichen Gebrauch, die nicht für automatisiertes Scripting verwendet werden kann, da Sie im Gegensatz zur kostenpflichtigen Version interaktiv den Anweisungen folgen müssen.

XXCOPY

Eine weitere Alternative ist RichCopy mit einer grafischen Benutzeroberfläche , über die Sie Ihre Optionen auswählen können. Es kann Ihnen dann die Befehlszeile Ihrer Operation zur Verwendung in Batch-Skripten geben.

RichCopy

Paradroid
quelle
1

Betreff: Robokopie und protokollierter Fortschrittslärm

Lösung: Verwenden Sie nur / TEE und lassen Sie es das 'Rauschen' protokollieren, sonst sehen Sie keinen Fortschritt. Verwenden Sie dann sed, wie zuerst vorgeschlagen, um die Protokolldatei wie folgt zu bereinigen:

sed -i.bak "s / \ x0d. * \ x0d. * $ //" logfile.txt

Entfernen Sie die .bak-Datei, wenn Sie keine nicht fixierte Sicherung wünschen. sed ist hier für Fenster verfügbar und funktioniert einwandfrei, zumindest für die Verwendung in einer * Zeile.

http://gnuwin32.sourceforge.net/packages/sed.htm

* (sed-Befehle in Unix-Bash / Cshell-Skripten sind oft über mehrere Zeilen verteilt, was mehr Flexibilität und Komplexität bietet. Ich erwarte nicht, dass diese Art von sed-Befehlen mit Windows-Cmd-Skripten funktioniert, aber sed ist unter Windows immer noch nützlich.)

Mac
quelle
1 Gibt es nicht eine Möglichkeit , um Rohr stdoutdurch seddirekt?
Paradroid
1
Natürlich können Sie durch sed leiten, das würde jedoch die Fortschrittsinformationen von der Konsolenanzeige sowie möglicherweise die Protokolldatei entfernen ...
Mac
Natürlich, aber ich dachte, vielleicht könnte der teeBefehl anstelle von Robocopys /TEESchalter verwendet werden, aber ich habe gerade festgestellt, dass er Teil TCC/LEeines Standardbefehls ist und kein Standardbefehl CMD. Es ist jedoch in verfügbar PowerShell.
Paradroid
eigentlich .. es schreibt immer noch das Fortschritts-Chaos in die Protokolldatei! So ist das genaue Gegenteil von dem, was gewünscht wird. Ich habe gerade getestet mit: Robocopy. tst /log:n:\tst.log / tee | sed "s / \ x0d. * \ x0d. * $ //"
Mac
Tee ist auch von gnuwin32 erhältlich .. hätte aber das gleiche Problem;) gnuwin32.sourceforge.net/packages/coreutils.htm
Mac