Die vorletzte Zeile einer Textdatei mittels Batch auslesen
WinSCP Übertragung von Dateien, Infomail mittels BLAT ob Übertragung erfolgreich war oder nicht, überprüfen ob Infomail versandt wurde oder nicht
Hallo zusammen,
ich habe mich in den letzten Tagen etwas mit Batch Scripting beschäftigt.
Nun stehe ich trotz intensiver Suche, hier und überall, an einem Punkt an dem ich nicht weiter komme.
Folgendes habe ich vor:
- definierte Dateien mittels WinSCP übertragen [funktioniert]
- überprüfen ob die Übertragung erfolgreich war oder nicht [funktioniert]
- Infomail mit Status mittels 'BLAT' übertragen [funktioniert manchmal]
- überprüfen ob Infomail versandt wurde [funktioniert nicht]
An sich funktioniert der Versand der Infomails, doch manchmal kommt keine Verbindung zum Mailserver zustande,
aus diesem Grund, wollte ich einfach das Logfile von Blat auslesen und eine simple Schleife erstellen.
Nun mein Problem.
Ich finde keine Möglichkeit die vorletzte Zeile auszulesen und einen Teil in eine Variable zu 'stecken'
Logfile von Blat: (oberer Teil, vom erfolgreichem Teil wurde abgeschnitten)(interessant ist die Fehlerlog)
Hier nun meine Batch Datei:
Jedoch lese ich nur die letzte Zeile mit diese FOR-Schleife aus, ich benötige die vorletze Zeile.
Hat jemand eine Idee?
Würde in der Blat-Log folgende Zeile die letzte Zeile sein, würde das Script schon funktionieren
Besten Dank für Infos und Hilfestellungen
Grüße Tobias
Hallo zusammen,
ich habe mich in den letzten Tagen etwas mit Batch Scripting beschäftigt.
Nun stehe ich trotz intensiver Suche, hier und überall, an einem Punkt an dem ich nicht weiter komme.
Folgendes habe ich vor:
- definierte Dateien mittels WinSCP übertragen [funktioniert]
- überprüfen ob die Übertragung erfolgreich war oder nicht [funktioniert]
- Infomail mit Status mittels 'BLAT' übertragen [funktioniert manchmal]
- überprüfen ob Infomail versandt wurde [funktioniert nicht]
An sich funktioniert der Versand der Infomails, doch manchmal kommt keine Verbindung zum Mailserver zustande,
aus diesem Grund, wollte ich einfach das Logfile von Blat auslesen und eine simple Schleife erstellen.
Nun mein Problem.
Ich finde keine Möglichkeit die vorletzte Zeile auszulesen und einen Teil in eine Variable zu 'stecken'
Logfile von Blat: (oberer Teil, vom erfolgreichem Teil wurde abgeschnitten)(interessant ist die Fehlerlog)
2010.10.22 23:37:13 (Fri): <<<getline<<< 250 2.6.0 <01cb7231$Blat.v2.6.2$4a6f15a9$1114f3c93f39@192.168.40.110> Queued mail for delivery
2010.10.22 23:37:13 (Fri): >>>putline>>> QUIT
2010.10.22 23:37:13 (Fri): <<<getline<<< 221 2.0.0 PROXY1 Service closing transmission channel
2010.10.22 23:37:13 (Fri)-------------End of Session------------------
2010.10.23 22:00:16 (Sat)------------Start of Session-----------------
Blat v2.6.2 w/GSS encryption (build : Feb 25 2007 12:06:19)
2010.10.23 22:00:46 (Sat): Error: Wait a bit (possible timeout).
2010.10.23 22:00:46 (Sat): SMTP server error
2010.10.23 22:00:46 (Sat): Error: Not a socket.
2010.10.23 22:00:46 (Sat): Error: Not a socket.
2010.10.23 22:00:46 (Sat)-------------End of Session------------------
Hier nun meine Batch Datei:
@echo off
chcp 1252>nul
set ue=ü
set ae=ä
set oe=ö
set Uue=Ü
set Aae=Ä
set Ooe=Ö
set ss=ß
chcp 850>nul
set error=Error
WinSCP.com /script=scp_export_.txt /log=scp_log.txt
if errorlevel 1 goto error
:mailerfolg
blat "mail_info\erfolgreich.txt" ^
-to max.muster@mann.de ^
-debug -timestamp -log "mail_info\blatSMTPlog.txt" ^
-subject "WinSCP %Uue%bertragung - Erfolgreich!"
for /f "tokens=6 delims=:, " %%a in (mail_info\blatSMTPlog.txt) do (set var1=%%a)
if %var1%==%error% goto mailerfolg
goto end
:error
:mailfehler
blat "mail_info\fehlerhaft.txt" ^
-to max.muster@mann.de ^
-debug -timestamp -log "mail_info\blatSMTPlog.txt" ^
-subject "WinSCP %Uue%bertragung - Fehlerhaft!
for /f "tokens=6 delims=:, " %%b in (mail_info\blatSMTPlog.txt) do (set var2=%%b)
if %var2%==%error% goto mailfehler
:end
Jedoch lese ich nur die letzte Zeile mit diese FOR-Schleife aus, ich benötige die vorletze Zeile.
Hat jemand eine Idee?
Würde in der Blat-Log folgende Zeile die letzte Zeile sein, würde das Script schon funktionieren
2010.10.23 22:00:46 (Sat): Error: Not a socket
Besten Dank für Infos und Hilfestellungen
Grüße Tobias
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 153821
Url: https://administrator.de/forum/die-vorletzte-zeile-einer-textdatei-mittels-batch-auslesen-153821.html
Ausgedruckt am: 21.04.2025 um 18:04 Uhr
8 Kommentare
Neuester Kommentar
Jetzt mal so aus dem Bauch raus: Ändere mal Zeile 26 in:
Wobei die bessere Lösung wäre, einfach den Errorlevel abzufragen. Dafür ist der ja da
http://www.blat.net/examples/ErrorLevel2.html
for /f "tokens=6 delims=:, " %%a in (mail_info\blatSMTPlog.txt) do if "%%a" neq "" (set var1=%%a)
Wobei die bessere Lösung wäre, einfach den Errorlevel abzufragen. Dafür ist der ja da
http://www.blat.net/examples/ErrorLevel2.html
Möglichkeit 1:
Möglichkeit 2:
Du magst es wie bisher auch, filterst aber die Zeile mit "End of Session" raus. Das geht mit findstr /v Da ist dan die letzte Zeile die die du willst. Geht aber auch nur wenn die letzte Zeile gleich ist.
Möglichkeit 3 (Die universellere Lösung):
Zähle die Zeilen der Datei (mit findstr /n oder mit for einfach durchzählen). Danach vom Wert 2 Subtrahieren. Diesen Wert dann in die For Schleife als skip einbauen und die zuweisung mit if not defined zuweisen.
Hilfen zu den beschriebenen Befehlen und Stichwörtern findest du hier im Batch und Shell Bereich genügend.
Vorzuziehen ist allerdings bei sowas auf jeden Fall die errorlevel Lösung.
for /f "tokens=6 delims=:, " %%a in (mail_info\blatSMTPlog.txt) do if "%%a" neq "of" (set var1=%%a)
Ist aber unschön.Möglichkeit 2:
Du magst es wie bisher auch, filterst aber die Zeile mit "End of Session" raus. Das geht mit findstr /v Da ist dan die letzte Zeile die die du willst. Geht aber auch nur wenn die letzte Zeile gleich ist.
Möglichkeit 3 (Die universellere Lösung):
Zähle die Zeilen der Datei (mit findstr /n oder mit for einfach durchzählen). Danach vom Wert 2 Subtrahieren. Diesen Wert dann in die For Schleife als skip einbauen und die zuweisung mit if not defined zuweisen.
Hilfen zu den beschriebenen Befehlen und Stichwörtern findest du hier im Batch und Shell Bereich genügend.
Vorzuziehen ist allerdings bei sowas auf jeden Fall die errorlevel Lösung.