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, 6476 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Bestimmte Zeile einer Textdatei mit Batch auslesen (2)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: Textdatei Zeilenweise auslesen (2)

Frage von CreatorX zum Thema Batch & Shell ...

Batch & Shell
gelöst Mittels Batch jede Zeile einer Textdatei prüfen (4)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
gelöst Erstellungsdatum vor jede Zeile einer Textdatei schreiben (5)

Frage von freakonaleash zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Internet
gelöst Jeden morgen Internet-Probleme (58)

Frage von pjrtvly zum Thema Internet ...

LAN, WAN, Wireless
gelöst IP Adressen - Modem - Switch - Accesspoint (26)

Frage von teuferl82 zum Thema LAN, WAN, Wireless ...

Server-Hardware
HP DL380 G7: Booten vom USB via USB 3.1-PCI-e Karte möglich? (24)

Frage von Paderman zum Thema Server-Hardware ...

DSL, VDSL
VDSL Signal via PowerLine an Fritzbox - Möglich? (19)

Frage von Seichobob zum Thema DSL, VDSL ...