malli88
Goto Top

TXT Nach String durchsuchen und Zeilennummer als errorlevel schreiben.

Hallo zusammen.

Ich habe die hoheitliche Aufgabe bekommen eine known errordatenbank zu schreiben.
Hier die Ausgangssituation:
Wir haben mehrer Batchscripte
Die Scripte sollen wenn ein bekannter Fehler, der als String in einer knownerror.txt gespeichert ist diese Datei danach durchsuchen und die Zeilennummer als Errorlevel zurück geben.
Geht sowas überhaupt mit Batch?

Bitte um Hilfe.

Danke!!!

Content-ID: 244217

Url: https://administrator.de/forum/txt-nach-string-durchsuchen-und-zeilennummer-als-errorlevel-schreiben-244217.html

Ausgedruckt am: 27.12.2024 um 02:12 Uhr

Gersen
Lösung Gersen 21.07.2014 aktualisiert um 14:34:13 Uhr
Goto Top
Hallo,

so etwas:

for /f "tokens=1 delims=:" %%i in ('findstr /n /c:"fehlerstring" "knownerror.txt"') do (  
echo gefunden in Zeile: %%i
exit /B %%i 
)

Gruß,
Gersen
Malli88
Malli88 21.07.2014 um 14:34:27 Uhr
Goto Top
Du bist der König!

face-big-smile
Malli88
Malli88 21.07.2014 um 14:39:12 Uhr
Goto Top
Hast du zufällig noch ne Idee wie ich den Errorstate eines WINSCP an das ausführende Batchscript übergeben kann?
Wenn ich absichtlich einen Error 2 in WINSCP produziere bekomme ich in dem Shellscript immer nur einen Error 1.
Gersen
Gersen 21.07.2014 um 15:09:57 Uhr
Goto Top
Für jeden Befehl der Batch wird der Returncode in eine Variable "ERRORLEVEL" geschrieben - und durch den nächsten Befehl wieder überschrieben.
winscp.com ...
if %errorlevel% neq 0 exit /b %errorlevel%
Hier würde für den Fall, dass der WinSCP-Befehl nicht erfolgreich verläuft (Returncode != 0), das Skript mit dem Returncode von WinSCP verlassen.
Malli88
Malli88 21.07.2014 um 15:14:17 Uhr
Goto Top
Das funktioniert aber leider nicht.

Hier mal ein Log von dem besagten WINSCP befehl.

2014-07-21 14:36:59.789+0200 [info] C:\ABITDATAtest\Import
2014-07-21 14:36:59.789+0200 [info] Fehler beim Wechseln in Verzeichnis '/home/ftproot/multiversa/daa'.
2014-07-21 14:36:59.789+0200 [info] Kann den realen Pfad für '/home/ftproot/multiversa/daa' nicht ermitteln.
2014-07-21 14:36:59.789+0200 [info] Datei oder Verzeichnis nicht gefunden.
2014-07-21 14:36:59.789+0200 [info] Fehlercode: 2
2014-07-21 14:36:59.789+0200 [info] Fehlernachricht vom Server : No such file
2014-07-21 14:36:59.789+0200 [info] /
2014-07-21 14:36:59.789+0200 [info] ---------------------------------------------------------------------------------
2014-07-21 14:36:59.789+0200 [info] errorlevel 1
2014-07-21 14:36:59.791+0200 [info] SCHEDULER-915 Process event
2014-07-21 14:36:59.793+0200 [ERROR] SCHEDULER-280 Process terminated with exit code 1 (0x1)
2014-07-21 14:36:59.795+0200 [WARN] SCHEDULER-845 Task ended without processing the order. The order remains in job's order queue in the same state
2014-07-21 14:36:59.796+0200 [info] SCHEDULER-843 Task has ended processing of Order TEST:TEST, state=SFTPImport, on JobScheduler
Gersen
Lösung Gersen 21.07.2014 aktualisiert um 15:52:17 Uhr
Goto Top
Ja. Mea culpa - ich lese hier:

"WinSCP executables return exit code 1, when any command is interrupted due to an error or any prompt is answered Abort (even automatically in batch mode). Otherwise it returns the exit code 0."

Ein Weg wäre, das XML-Logging zu verwenden - und für den Fall, dass WinSCP mit dem RC 1 abbricht, die XML-Datei zu parsen. Aber ob sich der Aufwand lohnt...?
Malli88
Malli88 21.07.2014 um 15:52:33 Uhr
Goto Top
Danke du hast mir sehr weitergeholfen!!!!
Malli88
Malli88 21.07.2014 um 16:03:12 Uhr
Goto Top
Leider muss ich dich doch nochmal belästigen. Sorry, bin echt ein totaler Anfänger in Batch.
Wie kann ich den den Errorcode der im WinSCP erzeugt wird in eine Variable packen und diese im Batch auslesen um ggf. damit zu Parsen?
Gersen
Gersen 21.07.2014 aktualisiert um 16:50:11 Uhr
Goto Top
Ein Versuch wäre (anhand der Struktur Deiner Log-Datei):

echo. > C:\temp\winscp.log
winscp.com {Deine Parameter} /log="C:\temp\winscp.log"  
if %errorlevel% neq 0 (
for /f "tokens=1,2,3,4 delims=:" %%i in ('findstr /c:"Fehlercode:" "C:\temp\winscp.log"') do (  
echo Fehlercode ist %%l 
exit /B %%l
)
)