2016-07-27 25 views
0

Ich möchte alle Zeilen mit einem% progress-Wert aus meinen Robocopy-Logfiles entfernen. Die Linien wie folgt aussehen:Wie benutzt man FINDSTR, um Zeilen mit% aus Robocopy Logfile zu entfernen?

  *EXTRA Datei   7.3 g test.pst 
      Neuer     7.3 g huge.PST 
    0.0% 
    0.0% 
    0.0% 
    0.1% 
    0.1% 
    0.1% 
    0.1% 
99.8% 
99.9% 
99.9% 
99.9% 
99.9% 
99.9% 
100% 
      Neue Datei   7.5 g another.PST 
    0.0% 

ich mit diesem Versuch nicht erfolgreich bin

FINDSTR.exe /V "%" LogFile.txt > LogFileWithoutPercentageLines.txt 

weil diese zu viel Linien schneidet weg (im obigen Beispiel die gesamte Linie mit huge.PST und another.PST)

Die% -Zeilen enthalten zwei Leerzeichen vor 0.0% und eine CR.
Die% -Zeilen enthalten ein Leerzeichen vor 10,0% und eine CR.
Die% -Zeile enthält kein Leerzeichen vor 100,0%, aber zwei Leerzeichen nach 100% und eine CR.

Wie kann ich diese nutzlosen 0.0% bis 100% Linien nur mit FINDSTR loswerden?

Antwort

1

Verwendung robocopy with /NP switch, cf Protokollierungsoptionen in robocopy /?:

/NP :: No Progress - don't display percentage copied. 

Zum Beispiel robocopy "%_source%" "%_target%" /log:"%temp%\38610436.log" /NP

jedoch neben kommentiert Skript zeigt eine mögliche Art und Weise alle zu entfernen, die unerwünschte Fortschritte Zeug aus einer bestehenden Unkraut-verseuchte Protokolldatei (findstr sich nicht für diese komplexe Aufgabe genügt):

@ECHO OFF >NUL 
SETLOCAL EnableExtensions DisableDelayedExpansion 

set "_source=d:\bat\odds and ends\B"  rem change to match your circumstances 
set "_target=d:\bat\odds and ends\Bcopy" rem detto 
set "_logFileRawData=%temp%\38610436.log" rem detto 
set "_logFileCleaned=%temp%\38610436a.log" rem detto 

rem /NP : No Progress - don’t display % copied 
rem robocopy "%_source%" "%_target%" /log:"%temp%\38610436.log" /NP 
    robocopy "%_source%" "%_target%" /log:"%temp%\38610436.log" 

>"%_logFileCleaned%" (
    for /f "usebackq tokens=1,* delims=:" %%G in (`findstr /N "^" "%_logFileRaw%"`) do (
    set "_line=%%H" 
    call :strip_Progress 
    SETLOCAL EnableDelayedExpansion 
     echo(!_line! 
    ENDLOCAL 
) 
) 
ENDLOCAL 
goto :eof 

:strip_Progress 
set "_zero="      rem zero percent indicator 
set "_line=%_line%"    rem remove all Carriage Return characters 
    rem after above command, _line with progress could be, excluding Square Brackets: 
    rem [New File    0 ZeroFile.ext100% ] 
    rem [New File   51808 TinyFile.txt 0% 100% ] 
    rem [Newer    1.1 m Mid_File.ext 0% 21% 42% 64% 85% 100% ] 
    rem [New File  162.1 m Big_File.ext 0.0% 0.6% 1.2% … 99.3% 99.9%100% ] 
if "%_line%"=="" goto :eof 
if "%_line:~-6%"=="100%% " call :removeProgress 
goto :eof 

:removeProgress 
set "_line=%_line:~0,-6%"   rem strip six trailing characters 
if defined _zero goto :eof 
    rem as yet, zero percent indicator not set 
:stripTrailingSpace 
if "%_line:~-2%"==" " set "_line=%_line:~0,-1%" & goto :stripTrailingSpace 
if "%_line:~-4%"==" 0%%" set "_zero=4" & set "_line=%_line%x%%" 
if "%_line:~-6%"==" 0.0%%" set "_zero=6" 
if "%_line:~-1%"=="%%" goto :removeProgress 
goto :eof 

Weitere Ressourcen (erforderlich Lesen, unvollständig):

+0

Vielen Dank für Ihre Lösung. Nur für die Aufzeichnungen: Die Ausführung von Robocopy ohne prozentualen Fortschritt ist in diesem Fall keine Option, da der Benutzer einen Fortschritt auf dem Bildschirm für riesige Dateien wie 7,5 GB * .pst sehen muss. Es gibt keine Möglichkeit,/NP nur für die Protokollierung zu verwenden, AFAIK. – PeterCo