Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Undefinierte XML mit verändertem Content mit Batch auslesen

Mitglied: pascallantzsch

pascallantzsch (Level 1) - Jetzt verbinden

17.09.2014 um 18:00 Uhr, 1383 Aufrufe, 12 Kommentare, 2 Danke

Hallo Community,

ich möchte eine Batch erstellen, die mir die mir meine Aufgaben erleichtert.
Dazu muss ich eine bzw. mehrer XML Dateien auslesen...

Dazu gibt es immer eine Index.xml die mir die Verweise auf die nächsten benötigten xml liefert

1. Ich kenne den Namen der XML (Index.xml)
das benötigte steht immer in der 2. Zeile
<IndexFile index="ordner:andereXML.zip" version="4.10.0" />
und ich möchte nur andereXML.zip oder ordner:andereXML.zip in eine neue .txt file schreiben

2. Der Name der Xml entspricht dem was ich gerade aus der Index.xml geholt habe (andereXML.zip)
das benötigte steht hier immer in der 8. Zeile
<FileName val="ordner2:file.zip" />
und ich benötige das zwischen den ", also ordner2:file.zip

Ich würde gerne sagen wie weit ich schon bin, aber leider habe ich bisher nicht gefunden, wie man mit batch etwas aus einer xml auslesen kann....
Und bei "Java ist auch eine Insel" bin ich erst bei Kapitel 3

Bin für jede erdenkliche Hilfe dankbar

greetz
Mitglied: rubberman
17.09.2014, aktualisiert um 18:39 Uhr
Hallo pascallantzsch, willkommen im Forum.

Batch ist grundsätzlich ungeeignet um XML zu verarbeiten, weil
  • XML in den unterschiedlichsten Zeichensätzen vorliegen kann
  • XML Zeilenumbrüche und Leerzeichen zwischen Knoten ignoriert (der gesamte Inhalt könnte theoretisch in einer Zeile stehen und wäre trotzdem valide)
  • Der Aufbau von XML sich an Knotenobjekten, Werten, Eigenschaften, CDATA Objekten etc. orientiert, Batch aber stupide zeilenweise abarbeitet.

Es ist also immer ein Lotteriespiel. Egal ...
Dein erstes Problemchen lässt sich (ungetestet) evtl. so lösen:
01.
@echo off &setlocal 
02.
for /f skip^=1^ tokens^=2^ delims^=^" %%i in ('type "Index.xml"') do ( 
03.
  if not defined filename for /f "tokens=2 delims=:" %%j in ("%%i") do ( 
04.
    set "filename=%%j" 
05.
    setlocal EnableDelayedExpansion 
06.
    >"neue.txt" echo !filename! 
07.
    endlocal 
08.
09.
)
Deinen Punkt 2 verstehe ich allerdings nicht. Eine ZIP Datei ist kein XML und enthält binären Inhalt. Wo willst du da eine Zeile 8 und einem Plaintext Inhalt herholen?

Grüße
rubberman
Bitte warten ..
Mitglied: pascallantzsch
17.09.2014, aktualisiert um 19:06 Uhr
Hallo, danke erstmal für die schnelle Antwort... Punkt 1 werde ich gleich mal testen...
Bei Punkt 2 habe ich mich etwas falsch ausgedrückt... es gibt einen zwischenschritt bei dem die zip entpackt wird und eine xml (mit dem selben namen) zum Vorschein kommt
Dass batch nicht unbedingt gut für die XML ist, habe ich schon gelesen... aber es geht trotzdem wurde mir gesagt... ich werde gleich mal deinen Code testen

Edit: der erste funktioniert einwandfrei
kann ich das noch so verändern, dass er vor dem, was er aus der xml hat eine http adresse hinzufügt?

also zum Beispiel http://meineSeite.de/ und dann die Abfrage aus der xml z.B. xmlcode1.zip
und dass es dann zusammen da steht, also http://meineSeite.de/xmlcode1.zip
Bitte warten ..
Mitglied: rubberman
17.09.2014 um 19:03 Uhr
es gibt einen zwischenschritt bei dem die zip entpackt wird und eine xml (mit dem selben namen) zum Vorschein kommt
OK, und welches Programm hast du installiert, mit dem du kommandozeilengesteuert die ZIP Datei auspacken kannst?

Grüße
rubberman
Bitte warten ..
Mitglied: pascallantzsch
17.09.2014 um 19:09 Uhr
winrar
derzeit nutze ich für diesen schritt aber den jitbit macro recorder
aber in der kommandozeile dürfte dies ja mit

start C:\Program Files\WinRAR\WinRAR.exe x C:\Temp\macro\Index.zip *.* C:\Temp\macro\

gehen
Bitte warten ..
Mitglied: rubberman
17.09.2014, aktualisiert um 19:23 Uhr
winrar
derzeit nutze ich für diesen schritt aber den jitbit macro Recorder
Von Macrorecordern habe ich keinen Schimmer. Die winrar Zeile sollte so auch nicht funktionieren, da der Pfad Leerzeichen enthält. START (ohne /WAIT) ist auch kontraproduktiv, da asynchron gearbeitet wird. Teste:
01.
start "" /wait "C:\Program Files\WinRAR\WinRAR.exe" x C:\Temp\macro\Index.zip *.* C:\Temp\macro\
Für die Syntax von winrar lege ich meine Hand aber nicht ins Feuer. Hab's nicht installiert.

kann ich das noch so verändern, dass er vor dem, was er aus der xml hat eine http adresse hinzufügt?
Kann man. Schreibe sie einfach vor !filename! in die ECHO Ausgabe. Falls das aber bedeutet, dass du die Datei erst downloaden musst, ist das noch mal was ganz anderes.
Es macht wenig Sinn wenn du häppchenweise mit deinen Anforderungen kommst ...

Grüße
rubberman
Bitte warten ..
Mitglied: pascallantzsch
17.09.2014, aktualisiert um 19:50 Uhr
Ok, danke erstmal für die Hilfe ich wollte es so knapp wie möglich halten, soll ja nicht so rüber kommen, als würde ich mich hier anmelden und mir mein programm quasi schreiben lassen das will ich auch nicht

hab mich jetzt an punkt 2 gewagt... erst dachte ich ich nutze !filename! um in der selben batch den herusgefundenen text als 2. dateinamen mit xml dahinter zu nehmen... hat nicht geklappt
als nächstes dachte ich, dass ich in einer 2. batch den namen aus der generierten txt irgendwie heraus nehme, herausholen klappt, aber wie setze ich das dann als dateinamen?
müsste dann ja so sein
set filename2 = !filename!
for /f skip^=1^ tokens^=2^ delims^=^" %%i in ('type "filename2.xml"') do ( usw....
Bitte warten ..
Mitglied: rubberman
17.09.2014, aktualisiert um 22:14 Uhr
soll ja nicht so rüber kommen, als würde ich mich hier anmelden und mir mein programm quasi schreiben lassen
Das finde ich völlig in Ordnung, führt aber zu Verwirrungen.
So was wie ...
1. ...
2. ...
3. ...
4. ...
Wobei ich für 2. und 3. bereits folgende Lösungen habe:
...
... würde ungemein helfen (ggf. auch Leuten mit ähnlichen Problemen).

01.
@echo off &setlocal 
02.
for /f skip^=1^ tokens^=2^ delims^=^" %%i in ('type "Index.xml"') do ( 
03.
  if not defined filename1 for /f "tokens=2 delims=:" %%j in ("%%i") do ( 
04.
    set "filename1=%%j" 
05.
    set "basename1=%%~nj" 
06.
    setlocal EnableDelayedExpansion 
07.
    >"neue1.txt" echo  http://meineSeite.de/!filename1! 
08.
    endlocal 
09.
10.
11.
 
12.
:: download, winrar etc. 
13.
 
14.
for /f skip^=7^ tokens^=2^ delims^=^" %%i in ('type "C:\Temp\macro\%basename1%.xml"') do ( 
15.
  if not defined filename2 for /f "tokens=2 delims=:" %%j in ("%%i") do ( 
16.
    set "filename2=%%j" 
17.
    set "basename2=%%~nj" 
18.
    setlocal EnableDelayedExpansion 
19.
    >"neue2.txt" echo !filename2! 
20.
    endlocal 
21.
22.
23.
 
24.
:: Testausgabe 
25.
echo "%basename1%" 
26.
echo "%basename2% 
27.
pause
So oder ähnlich (wieder ungetestet) ...

Grüße
rubberman

EDIT %basename% zu %basename1% in Zeile 14
Bitte warten ..
Mitglied: pascallantzsch
17.09.2014 um 22:22 Uhr
Super, hat mit nen paar Änderungen und dem hinzufügen einer 3. Sache, damit ich noch das vor dem Doopelpunkt aus 2 bekomme geklappt... hier nochmal der Code

@echo off &setlocal
for /f skip^=1^ tokens^=2^ delims^=^" %%i in ('type "Index.xml"') do (
if not defined filename1 for /f "tokens=2 delims=:" %%j in ("%%i") do (
set "filename1=%%j"
set "basename1=%%~nj"
setlocal EnableDelayedExpansion
>"neue1.txt" echo !filename1!
endlocal
)
)
:: download, winrar etc.
for /f skip^=7^ tokens^=2^ delims^=^" %%i in ('type "%basename1%.xml"') do (
if not defined filename2 for /f "tokens=2 delims=:" %%j in ("%%i") do (
set "filename2=%%j"
set "basename2=%%~nj"
setlocal EnableDelayedExpansion
>"neue2.txt" echo !filename2!
endlocal
)
)
for /f skip^=7^ tokens^=2^ delims^=^" %%i in ('type "%basename1%.xml"') do (
if not defined filename3 for /f "tokens=1 delims=:" %%j in ("%%i") do (
set "filename3=%%j"
set "basename3=%%~nj"
setlocal EnableDelayedExpansion
>"neue3.txt" echo !filename3!
endlocal
)
)
:: Testausgabe
echo "%basename1%"
echo "%basename2%"
echo "%basename3%"
pause
Bitte warten ..
Mitglied: rubberman
17.09.2014, aktualisiert um 23:25 Uhr
Das kannst du abkürzen.
01.
for /f skip^=7^ tokens^=2^ delims^=^" %%i in ('type "%basename1%.xml"') do ( 
02.
  if not defined filename2 ( 
03.
    set "property2=%%i" 
04.
    for /f "tokens=1,2 delims=:" %%j in ("%%i") do ( 
05.
      set "folder2=%%j" 
06.
      set "filename2=%%k" 
07.
      set "basename2=%%~nk" 
08.
      REM * Für den Test auskommentiert: * 
09.
      REM setlocal EnableDelayedExpansion 
10.
      REM >"neue2.txt" echo !filename2! 
11.
      REM endlocal 
12.
13.
14.
15.
 
16.
echo "%property2%" 
17.
echo "%folder2%" 
18.
echo "%filename2%" 
19.
echo "%basename2%"
Je nachdem, was du tatsächlich benötigst, kannst du ggf. noch weiter einkürzen.

Grüße
rubberman
Bitte warten ..
Mitglied: Endoro
18.09.2014 um 02:13 Uhr
Batch ist grundsätzlich ungeeignet um XML zu verarbeiten, weil

Hey,
@rubberman grundsätzlich hast du natürlich recht, aber... häufig kann xml ganz gut gebatcht werden. Die Struktur muss exakt eingehalten werden (wie immer bei Batch), 1-Byte-Zeichencodierung (ANSI), zeilenorientierte Fragestellung. Dann geht sogar Regex, obwohl das ja quasi verboten ist. Manchmal helfen die xmlStarlet Tools weiter.
Gruss, Endoro
Bitte warten ..
Mitglied: rubberman
18.09.2014 um 22:18 Uhr
Hi Endoro.

Zitat von Endoro:
@rubberman grundsätzlich hast du natürlich recht, aber... häufig kann xml ganz gut gebatcht werden. Die Struktur muss exakt eingehalten werden (wie immer bei Batch), 1-Byte-Zeichencodierung (ANSI), zeilenorientierte Fragestellung.
Joa, wenn oben nicht etwas wie "immer in der X. Zeile" gestanden hätte, hätte ich auch nicht mit Batch gestartet, sondern (wie üblich) gleich auf das XML DOM verwiesen. Für/gegen unterschiedliche Zeichensätze hilft TYPE auch schon mal aus dem gröbsten heraus.

Dann geht sogar Regex, obwohl das ja quasi verboten ist.
LOL That would have been a link for the "Humor" forum as well

Manchmal helfen die xmlStarlet Tools weiter.
Kannte ich noch nicht. Danke! Persönlich halte ich es dann aber doch lieber mit dem WSH (weil es ohne 3rd Party Tools auskommt).

Grüße
rubberman
Bitte warten ..
Mitglied: pascallantzsch
24.09.2014 um 09:38 Uhr
Nochmal Vielen Dank
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
BATCH Element aus XML-File auslesen
gelöst Frage von pappkameradBatch & Shell9 Kommentare

Hallo liebe Admins, ich habe schon öfter bei euch vorbeigeschaut und ein immer eine Lösung für meine Problemchen gefunden. ...

Batch & Shell
Finaler Content aus scriptgenerierter Webseite auslesen
Frage von ScriptomaniaBatch & Shell1 Kommentar

Hallo Community, ich soll für meinen Chef eine automatisierte Auswertung erstellen. Als Datenquelle ist mir nur ein intranetseitig verfügbares ...

VB for Applications
XML Datei auslesen mit Excel
Frage von kaiuwe28VB for Applications10 Kommentare

Hallo zusammen, ich mal wieder Leider komme ich nicht weiter. Ich möchte aus einem Ordner mit mehreren XML Dateien ...

XML
XML mit Powershell auslesen und TreeView füllen
gelöst Frage von H41mSh1C0RXML6 Kommentare

Hi@Alle XML Powershell Profi's, Zum Test will ich den Inhalt meines Beispiel XML Files in einer TreeView darstellen. Inhalt ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 8 StundenLinux1 Kommentar

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit23 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
gelöst Frage von Windows10GegnerNetzwerkgrundlagen22 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

Netzwerke
Packet loss bei "InternetLeitungsvollauslastung"
gelöst Frage von Freak-On-SiliconNetzwerke17 Kommentare

Servus; Ja der Titel klingt komisch, is aber so. Wenn die Internetleitung voll ausgelastet ist, hab ich extreme packet ...