2016-06-02 20 views
0

Ich schreibe ein kleines Batch-Skript auf einer Windows-Maschine für die Automatisierung der Pulldown von Fehlermeldungen und Screenshots.Findstr nicht gefunden string "Fehler: 0"

Ich bin an den Punkt gekommen, wo ich einmal eine Liste von URLs habe, kann ich bekommen, was ich will. Allerdings muss ich diese URL-Listen derzeit manuell erstellen. Die Informationen, die ich benutze sind in einer Log-Datei, die die Ausgabe der Konsole eines Servers enthält eine Reihe von Tests ausgeführt und kommen in Form:

E:\foo\bar\three\tall\cats\testRunOutput\foobar\foosball\dogstest\Login.html 
Successes: 1, Failures: 0 

E:\foo\bar\three\tall\cats\testRunOutput\foodbarn\catdog\testoid\ReLogin.html 
Successes: 0, Failures: 1 

E:\foo\bar\three\tall\cats\testRunOutput\foobar\topdog\dogstest\Login.html 
Successes: 1, Failures: 4 

Was ich brauche, sind die Linien über jede Linie einen von Null verschiedenen Ausfall enthält (zB Failures: gefolgt von einer beliebigen Anzahl von Ziffern ungleich Null).

Mein aktueller Ansatz beinhaltet das Entfernen jede Zeile mit „Fehler: 0“ mit:

findstr /v "Failures: 0" consoleText.txt > foo\bar\failures.txt 

Dann die Linie über jeder Linie Strippen enthält ‚Ausfälle: [digits]‘. Sobald ich eine Datei mit folgenden Zeilen strukturiert haben, wie folgt:

E:\foo\bar\three\tall\cats\testRunOutput\foodbarn\catdog\testoid\ReLogin.html 
E:\foo\bar\three\tall\cats\testRunOutput\foobar\topdog\dogstest\Login.html 

Es sollte ziemlich einfach sein, die ersten 41 Zeichen jeder Zeile zu löschen, legen Sie den Anfang der URL http://build-server:1111/job/foo/bar/testRunOutput/ und schließlich jeden Slash kippen.

wirklich brauche ich nur mit

findstr /v "Failures: 0" consoleText.txt > foo\bar\failures.txt 

helfen Aber ich dachte, den Rest zu schreiben Kontext zu schaffen, oder bevor sie durch diese zusätzlichen Code, falls jemand weg zu bekommen hatte.

Es tut mir leid, wenn dies eine grundlegende Frage ist, aber ich habe hauptsächlich die Befehlszeile auf Mac und Linux-Systemen arbeiten.

Antwort

1

Sie auch find statt findstr verwenden können. find Griffe Räume wie jedes anderes Zeichen:

find "Failures: 0" 

Aber was Sie wirklich wollen:

Was ich brauche, sind die Linien über jeder Linie einen von Null verschiedenen Ausfall containging (z. B. ‚Fehler:‘, gefolgt von eine beliebige Anzahl von Ziffern ungleich Null).

„Eine beliebige Anzahl von Nicht-Null-Ziffern“ mit übersetzt werden „alles, was mit einer Ziffer ungleich Null beginnt“

findstr /r /c:"Failures:\ [1-9]" 

/r: Verwenden Sie Regex (findstr unterstützt eine sehr kleine Teilmenge von Regex)
\ : nehmen Sie die folgende char (Leerzeichen) Literal
[1-9] eine der Ziffern 1,2,3, ... 9

Das Problem ist, die Zu druckende Zeile ist nicht die Zeile, die ausgewertet werden soll.Verwenden Sie eine Variable (!line!) die letzte Zeile zu halten:

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
for /f "tokens=*" %%a in (t.txt) do (
    echo %%a|findstr /r /c:"Failures:\ [1-9]" >nul && echo !line! 
    set line=%%a 
) 

In jeder Iteration der Schleife Sie !line! = der zuletzt bearbeiteten Zeile und %%a die aktuelle Zeile haben. Der Trick besteht darin, line am Ende der Schleife zu setzen.)

0

Nach weiteren Recherchen und einigen, ähm, kreativen Google-Suchen, fand ich heraus, dass etwas, was ich vorher versucht hatte, ausreichend war. Die Linie endete wie folgt sind:

findstr /v /c:"Failures: 0" consoleText.txt > foo\bar\failures.txt