tester23
Goto Top

Batch soll prüfen ob eine XML-Datei vorhanden ist und dann mehrere Informationen auslesen und und in eine LOG-Datei schreiben

Hallo,

ich bin neu hier und brauche wie immer gleich Hilfe von den Profis.

In meinem Fall soll per Batch geprüft werden ob eine Xml-Datei in einem ganz bestimmten Ordner vorhanden ist und wenn JA, sollen dann mehrere Informationen aus dieser Xml ausgelesen werden und per Email versendet werden.

Den ersten Teil (die Überprüfung ob Xml vorhanden ist bekomme ich hin.
Auch den letzten Teil (per Email versenden) bekomme ich auch hin.

Aber aus der Xml auslesen will einfach nicht funktionieren.
Die Xml sieht wie folgt aus:

<JobDetails>
<SerialNumber>1234567890</SerialNumber>
<MessageID>ef574eb2-3cc4-43c6-86ca-2abc3d5ccc94</MessageID>
<ProgressCode>1</ProgressCode>
<ProgressMsg>OK</ProgressMsg>
<Attempts>1</Attempts>
<Timestamp>20130328-0609</Timestamp>
<SwitchState>Aus</SwitchState>
<ServicePointName>DE000536247680000100027012000S036</ServicePointName>
<Source>Lichtsensor</Source>
</JobDetails>
<JobDetails>
<SerialNumber>1234567891</SerialNumber>
<MessageID>f2650a02-7f12-4e2e-89fb-88896cf2f4e7</MessageID>
<ProgressCode>1</ProgressCode>
<ProgressMsg>NOK</ProgressMsg>
<Attempts>1</Attempts>
<Timestamp>20130328-0609</Timestamp>
<SwitchState>Aus</SwitchState>
<ServicePointName>DE000536247680000100027012000S028</ServicePointName>
<Source>Lichtsensor</Source>
</JobDetails>

Das ist nur ein Ausschnitt, es sind ca. 10 solche Jobs hintereinander vorhanden.
Per Batch soll überprüft werden ob <ProgressMsg>OK ist, wenn ja GOTO Next und wenn
ProgressMsg> NOK ist, dann sollen folgende Informationen
SerialNumber>1234567891
<ProgressMsg>NOK
<TimeStamp>20130328-0609
in eine Log-Datei geschrieben werden und dann per Email versendet werden.

Es wäre super wenn mir jemand hier helfen könnte!?

Viele grüße und besten Dank im Voraus

tester23

Content-ID: 204256

Url: https://administrator.de/forum/batch-soll-pruefen-ob-eine-xml-datei-vorhanden-ist-und-dann-mehrere-informationen-auslesen-und-und-in-eine-204256.html

Ausgedruckt am: 23.12.2024 um 10:12 Uhr

Endoro
Endoro 02.04.2013 um 12:06:11 Uhr
Goto Top
Hi tester23,

leider habe ich keine Idee von deinen Vorkenntnissen, du hast keinen Code aufgeschrieben. Ich würde zB mal so anfangen:

for /f "tokens=1,2 delims=><" %%i in (mylog.xml) do echo %%i %%j  


bb
tester23
tester23 02.04.2013 um 14:22:32 Uhr
Goto Top
Vielen Dank für die schnelle Antwort,

mein Code ist noch nicht volständig, und funktioniert nut in Teilen, deswegen habe ich Ihn hier nicht reingestellt.
Mein Problem ist die Suche nach dem möglichen Wert NOK in

<ProgressMsg>NOK</ProgressMsg>

und wenn ich ein NOK finde (die meisten sind ja sowieso OK), dann sollen die Werte

SerialNumber>1234567891
<ProgressMsg>NOK
<TimeStamp>20130328-0609

die zu diesem NOK-Wert gehören in eine LOG-Datei geschreiben werden.

Ich komme einfach nicht mit diesen "tokens" Befehl nicht klar.

Wenn mit Jemand eine dabei helfen könnte, wäre das echt super!

viele Grüße
tester23
ramses345
ramses345 02.04.2013 um 18:30:56 Uhr
Goto Top
Hi,

Um welches Betriebssystem handelt es sich?
Ist die powershell drauf?

Lg
ramses345
ramses345 02.04.2013 um 19:20:16 Uhr
Goto Top
Anbei ein kurzes PowershellScript welches man erweitern müsste:


$xmlort = 'C:\Temp\new 2.xml'

$da = Test-Path $xmlort


if ($da -eq $true){

[xml]$xml = Get-Content $xmlort

if ($xml.JobDetails.ProgressMsg -ne "OK"){

"Serialnumber: " + $xml.JobDetails.SerialNumber >> C:\Temp\Logfehler.txt
"Status: " + $xml.JobDetails.ProgressMsg >> C:\Temp\Logfehler.txt
"Zeitstempel: " + $xml.JobDetails.Timestamp >> C:\Temp\logfehler.txt
}

}
else {


Write-Output "Datei ist nicht vorhanden"
}
Endoro
Endoro 02.04.2013 um 22:33:15 Uhr
Goto Top
Es scheint ja wirklich ein ernstes Problem mit den tokens zu geben face-smile

@echo off &setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=><" %%i in (mylog.xml) do (  
	if "%%i"=="SerialNumber" set "SerialNumber=%%j"  
	if "%%i"=="ProgressMsg" set "ProgressMsg=%%j"  
	if "%%i"=="Timestamp" set "Timestamp=%%j"  
	if "%%i"=="/JobDetails" if "!ProgressMsg!"=="NOK" (  
		echo(!SerialNumber! !ProgressMsg! !Timestamp!
	)
)


bb
tester23
tester23 03.04.2013 um 14:05:57 Uhr
Goto Top
Hallo mfm4aa,

vielen Dank, das hat mir schon sehr geholfen!
Ich habe nur noch ein kleines Problemchen:
Evtl. ist es eine Kleinigkeit, aber ich bekomme es nicht hin.

Angenommen, ich habe 4 Jobs (d.h. 4 "ProgressMsg" in der XML-Datei).
Drei davon sind OK und eine ist NOK.
Der obige Code gibt mit ja nur etwas aus wenn er einen NOK findet und für den gibt er ja etwas aus was ich weiterverarbeiten kann.
Ich brauche also eine "else" Verkünpfung irgendwo im Code mit der ich dann auch für "ProgressMsg" OK auch etwas ausgeben kann.
Das war mit gestern bei der Aufgabenstellung noch nicht bewusst.
Alle meine versuche mit "else" zu arbeiten haben heute keinen Erfolg gebracht!

Viele grüße
tester23