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

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

Frage Entwicklung Batch & Shell

Mitglied: tester23

tester23 (Level 1) - Jetzt verbinden

02.04.2013 um 10:16 Uhr, 2450 Aufrufe, 6 Kommentare

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
Mitglied: Endoro
02.04.2013 um 12:06 Uhr
Hi tester23,

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

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

bb
Bitte warten ..
Mitglied: tester23
02.04.2013 um 14:22 Uhr
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
Bitte warten ..
Mitglied: ramses345
02.04.2013 um 18:30 Uhr
Hi,

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

Lg
Bitte warten ..
Mitglied: ramses345
02.04.2013 um 19:20 Uhr
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"
}
Bitte warten ..
Mitglied: Endoro
02.04.2013 um 22:33 Uhr
Es scheint ja wirklich ein ernstes Problem mit den tokens zu geben

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

bb
Bitte warten ..
Mitglied: tester23
03.04.2013 um 14:05 Uhr
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
Bitte warten ..
Ähnliche Inhalte
PHP
gelöst Externe XML-Datei in PHP auslesen (18)

Frage von Akrosh zum Thema PHP ...

Batch & Shell
gelöst In Batch auf Erstelldatum einer Datei prüfen (5)

Frage von AS-N00 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Eingabe in Datei schreiben (2)

Frage von MedicalAd zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Windows 10

Windows 10: Erste Anmeldung Animation deaktivieren

(3)

Anleitung von alemanne21 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Linksys wrt1200ac v2 mit dd-wrt: keine vlan-einstellungen im GUI (15)

Frage von Pixi123 zum Thema Router & Routing ...

E-Business
Wo tragt ihr eure privaten Termine ein? (13)

Frage von honeybee zum Thema E-Business ...

Entwicklung
gelöst Tipp für Anfänger- Wie würdet ihr automatischen Mailversand umsetzen? (12)

Frage von Cloudyme zum Thema Entwicklung ...

Windows Server
Terminalserver starten willkürlich neu (12)

Frage von thaefliger zum Thema Windows Server ...