Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Die vorletzte Zeile einer Textdatei mittels Batch auslesen

Frage Entwicklung Batch & Shell

Mitglied: .Sessl

.Sessl (Level 1) - Jetzt verbinden

26.10.2010 um 16:12 Uhr, 6316 Aufrufe, 8 Kommentare

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)

01.
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 
02.
2010.10.22 23:37:13 (Fri): >>>putline>>> QUIT 
03.
2010.10.22 23:37:13 (Fri): <<<getline<<< 221 2.0.0 PROXY1 Service closing transmission channel 
04.
2010.10.22 23:37:13 (Fri)-------------End of Session------------------ 
05.
 
06.
2010.10.23 22:00:16 (Sat)------------Start of Session----------------- 
07.
Blat v2.6.2 w/GSS encryption (build : Feb 25 2007 12:06:19) 
08.
2010.10.23 22:00:46 (Sat): Error: Wait a bit (possible timeout). 
09.
2010.10.23 22:00:46 (Sat): SMTP server error 
10.
2010.10.23 22:00:46 (Sat): Error: Not a socket. 
11.
2010.10.23 22:00:46 (Sat): Error: Not a socket. 
12.
2010.10.23 22:00:46 (Sat)-------------End of Session------------------

Hier nun meine Batch Datei:
01.
@echo off 
02.
 
03.
chcp 1252>nul 
04.
set ue=ü 
05.
set ae=ä 
06.
set oe=ö 
07.
set Uue=Ü 
08.
set Aae=Ä 
09.
set Ooe=Ö 
10.
set ss=ß 
11.
chcp 850>nul 
12.
set error=Error 
13.
 
14.
 
15.
WinSCP.com /script=scp_export_.txt /log=scp_log.txt 
16.
if errorlevel 1 goto error 
17.
 
18.
 
19.
:mailerfolg 
20.
 
21.
blat "mail_info\erfolgreich.txt" ^ 
22.
-to max.muster@mann.de ^ 
23.
-debug -timestamp -log "mail_info\blatSMTPlog.txt" ^ 
24.
-subject "WinSCP %Uue%bertragung - Erfolgreich!" 
25.
 
26.
for /f "tokens=6 delims=:, " %%a in (mail_info\blatSMTPlog.txt) do (set var1=%%a) 
27.
if %var1%==%error% goto mailerfolg 
28.
 
29.
 
30.
goto end 
31.
 
32.
 
33.
:error 
34.
:mailfehler 
35.
 
36.
blat "mail_info\fehlerhaft.txt" ^ 
37.
-to max.muster@mann.de ^ 
38.
-debug -timestamp -log "mail_info\blatSMTPlog.txt" ^ 
39.
-subject "WinSCP %Uue%bertragung - Fehlerhaft! 
40.
 
41.
for /f "tokens=6 delims=:, " %%b in (mail_info\blatSMTPlog.txt) do (set var2=%%b) 
42.
if %var2%==%error% goto mailfehler 
43.
 
44.
 
45.
: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
01.
2010.10.23 22:00:46 (Sat): Error: Not a socket

Besten Dank für Infos und Hilfestellungen
Grüße Tobias
Mitglied: miniversum
26.10.2010 um 16:32 Uhr
Jetzt mal so aus dem Bauch raus: Ändere mal Zeile 26 in:
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
Bitte warten ..
Mitglied: .Sessl
26.10.2010 um 16:45 Uhr
Hallo miniversum,

nein, leider nicht. Die Variable %%a zieht den Wert 'of' von End of session. Also die letzte Zeile.
Nur Interesse halber, was sollte das notequal "" erreichen?


Gruß
Tobias
Bitte warten ..
Mitglied: miniversum
26.10.2010 um 19:24 Uhr
Na dann eben auf "of" kontrollieren.
Dadurch werden nur die Zeilen in die Variable übernommen in denen dieses Tocken nicht "of" ist.
Aber wie schon geschrieben wäre woll die Abfrage von errorlevel besser geeignet.
Bitte warten ..
Mitglied: .Sessl
26.10.2010 um 21:29 Uhr
Der Link ist doch neu, oder habe ich diesen vorhin übersehen?
Btw. damit klappt es, danke. "Warum habe ich diese Lösung nicht gefunden?"


Gibt es dennoch eine Lösung für meine Frage?


Gruß
Tobias
Bitte warten ..
Mitglied: miniversum
26.10.2010 um 21:43 Uhr
Möglichkeit 1:
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.
Bitte warten ..
Mitglied: .Sessl
26.10.2010 um 22:50 Uhr
Naja, Möglichkeit 1 geht nicht, da die letzte Zeile immer, bei Erfolg oder Misserfolg, im Logfile steht.
Möglichkeit 2 und 3 müsste ich mal ausprobieren.

Danke für die schnelle Hilfe.
Bitte warten ..
Mitglied: miniversum
27.10.2010 um 12:45 Uhr
Warum soll dann Möglichkeit 1 nicht gehen?
for /f "tokens=6 delims=:, " %%a in (mail_info\blatSMTPlog.txt) do if "%%a" neq "of" (set var1=%%a)
Sollte dir dennoch die vorletzte Zeile liefern
Bitte warten ..
Mitglied: .Sessl
29.10.2010 um 13:38 Uhr
Nein leider nicht.
Wenn ich mir die Variable %var1% ausgeben lassen, steht immer of drin.

Er landet also in einer endlos Schleife.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Per Batch Textdatei Spaltenweise auslesen nochmal weil ich dumm bin (9)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Batch & Shell
Batch Textdatei Spaltenweise auslesen (7)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Windows Systemdateien
gelöst Registry-Schlüssel per Batch auslesen und in Datei schreiben (9)

Frage von Philzip zum Thema Windows Systemdateien ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...