Jak robocopy z postępem zalogowanym tylko na konsolę?

8

Chcę uruchomić RoboCopy, który zaktualizuje konsolę z% postępem, ale nie zaśmieci pliku dziennika z% postępem.

Następujące polecenie RoboCopy wykona żądaną kopię i dołączy informacje rejestrowania do pliku dziennika.

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

Problem polega na tym, że plik dziennika jest zaśmiecony aktualizacjami% postępu. Dlatego muszę zmienić polecenie na to:

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

Teraz problem polega na tym, że nie otrzymuję żadnych aktualizacji% postępu na ekranie.

Kilka razy przeczytałem http://technet.microsoft.com/en-us/library/cc733145%28WS.10%29.aspx i nie mogę znaleźć potrzebnych przełączników. Czy coś mi brakuje lub czy to, co chcę osiągnąć, nie jest możliwe?

Tim Murphy
źródło
Czy musisz używać tylko wbudowanych narzędzi?
Cześć71,

Odpowiedzi:

2

Ponieważ nikt nie odpowiedział na to tak długo, pomyślałem, że zasugeruję kilka rzeczy.

Jeśli używasz skryptów wsadowych, użycie sed nie powinno być trudne do usunięcia niechcianych informacji o postępie z pliku dziennika. Nie mam na to wystarczającego doświadczenia, aby dać ci rozwiązanie z wykorzystaniem go bez poświęcania na to czasu.

Istnieje jeden plik .exe z wersji sedw UnxUtils (z nieco bardziej aktualne wersji zip update).

Inną opcją byłoby użycie XXCOPY zamiast Robocopy. Ma naprawdę śmieszną liczbę przełączników (ponad 230), co pozwala ci robić, co chcesz. Musisz spędzić cały wieczór na wyborze, z których chcesz skorzystać. Ma także okno dialogowe postępu GUI, jeśli wolisz z niego korzystać.

Istnieje darmowa wersja do użytku osobistego, której nie można używać do automatycznego tworzenia skryptów, ponieważ trzeba interaktywnie postępować zgodnie z monitami, w przeciwieństwie do wersji płatnej.

XXCOPY

Inną alternatywą jest RichCopy , która posiada GUI, którego można użyć do wyboru opcji. Może następnie podać wiersz polecenia operacji do użycia w skryptach wsadowych.

RichCopy

paradroid
źródło
1

Re: robocopy i rejestrowany „hałas” postępu

Rozwiązanie: użyj just / TEE i pozwól mu rejestrować „szum”, w przeciwnym razie nie zobaczysz żadnego postępu. Następnie użyj sed, zgodnie z pierwszą sugestią, aby wyczyścić plik dziennika w następujący sposób:

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

usuń .bak, jeśli nie chcesz nieusuniętej kopii zapasowej. sed jest dostępny tutaj dla systemu Windows i działa dobrze, przynajmniej dla pojedynczej * linii.

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

* (polecenia sed w uniksowych skryptach bash / cshell są często rozmieszczone w wielu wierszach, co zapewnia większą elastyczność i złożoność. Nie oczekuję, że tego typu polecenia sed będą działać ze skryptami cmd systemu Windows, ale sed nadal jest użyteczny w systemie Windows).

Prochowiec
źródło
+1 Czy nie ma sposobu na bezpośrednie stdoutprzejście sed?
paradroid
1
oczywiście możesz przepuścić przez sed, co jednak usunęłoby informacje o postępie z wyświetlacza konsoli, a także prawdopodobnie plik dziennika ...
Mac
Oczywiście, ale myślałem, że może teekomenda może być użyta zamiast /TEEprzełącznika Robocopy , ale właśnie zdałem sobie sprawę, że jest to część, TCC/LEa nie standardowa CMDkomenda. Jest jednak dostępny w PowerShell.
paradroid
właściwie .. nadal zapisuje bałagan postępu w pliku dziennika! Jest więc dokładnie odwrotnością tego, co jest pożądane. Właśnie przetestowałem z: robocopy. tst /log:n:\tst.log / tee | sed "s / \ x0d. * \ x0d. * $ //"
Mac
tee jest również dostępny z gnuwin32 .. ale miałby ten sam problem;) gnuwin32.sourceforge.net/packages/coreutils.htm
Mac