Proll012 0 Geschrieben 17. September 2021 Melden Teilen Geschrieben 17. September 2021 Hallo, ich habe einen Ordner voller Xml Dateien. in einigen dieser Dateien befindet sich folgendes Problem: Zeile X: <Anfang> XYZ; 22 </ende> diese Zeile soll bei dem Semikolon in 2 Zeilen aufgeteilt werden. Jetzt möchte ich das so machen, das ich eine Batch Datei habe, welche die XML Dateien im Ordner durchgeht und diese Zeilen immer in 2 aufteilt. Das Semikolon ist dann natürlich nicht mehr gebraucht. Liebe Grüße und danke im Voraus Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 17. September 2021 Melden Teilen Geschrieben 17. September 2021 Hallo @Proll012, das ist eine schöne Aufgabe für ein Skript. Mal davon abgesehen, dass ich eher PowerShell empfehlen würde, weil ich mich mit Batch dafür nicht gut genug auskenne und weil PowerShell auch die neuere und mächtigere Skriptsprache ist, klingt der Plan ganz gut. Was ist denn die eigentliche Frage? Zitieren Link zu diesem Kommentar
Proll012 0 Geschrieben 17. September 2021 Autor Melden Teilen Geschrieben 17. September 2021 Also danke erstmal, die Frage ist, wie ich es schaffe automatisch, xml daten in einem Ordner, nach einer Bestimmten Zeile zu durchsuchen und diese Unabhängig vom Geschriebenen Inhalt beim Semikolon in Zwei Zeilen aufteile. Beispiel <Anfang> XYZ; 22 </ende> Bearbeitet soll es so sein : <Anfang> XYZ</ende> <Anfang> 22</ende> Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 17. September 2021 Melden Teilen Geschrieben 17. September 2021 Hmmm ... das klingt, als hättest Du eher keine Kenntnisse im Skripten allgemein, oder? Wenn Du damit anfangen möchtest, würde ich Dir - wie oben schon erwähnt - eher PowerShell als Batch empfehlen. Man bekommt im Zweifel auch mehr und schneller Hilfe dafür im Netz. Vielleicht schaust Du Dir mal die Hilfe zu den folgenden cmdlets (so heißen die Befehle in PowerShell) an: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem?view=powershell-7.1 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-content?view=powershell-7.1 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/foreach-object?view=powershell-7.1 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/out-file?view=powershell-7.1 Du solltest die Hilfe jeweils komplett inklusive der Beispiele lesen, um zu lernen wie sie verwendet werden. Wenn Du Probleme mit Code hast, den Du geschrieben hast, kannst Du den hier posten und wir werden nach Kräften versuchen Dir zu helfen aber wir schreiben hier keinen gebrauchsfertigen Code auf Anfrage. Das wäre mehr als unfair gegenüber Leuten, die damit ihr Geld verdienen (müssen). Zitieren Link zu diesem Kommentar
Proll012 0 Geschrieben 17. September 2021 Autor Melden Teilen Geschrieben 17. September 2021 Ja hast du wohl recht, bin Azubi. Ich hab im netzt paar "Vorlagen" gefunden und versuch mich darüber an meine Problemlösung zu wurschteln. Jemanden dafür zu bezahlen kommt eher nicht infrage # Ausgangspfad der Datei-Suche $quellpfad = "X:\Experiment,Test" # Alle Dateien mit der Endung *.xml Rekursiv in ein Array schreiben $allexml = Get-ChildItem $quellpfad "*.xml" -Recurse # Array für Standorte Anlegen $FVALUE = @() # Alle Standorte aller XML-Elemente in das Array $Standorte schreiben foreach ($xmlobjekt in $allexml) { # Holen des Inhalts der XML Datei [xml]$xml = Get-Content $xmlobjekt.FullName # Abrufen der Standortinformationen aus den Server-Elementen und an Array anhängen $FVALUE += (Select-Xml -Xml $xml -XPath '//Server').Node.Informationen.FVALUE } # Ausgabe des Arrays Gruppiert nach den Werten $FVALUE.GetEnumerator() | Group-Object # Inhalte der XML-Elemente mit XPath suchen und ersetzen foreach ($xmlobjekt in $allexml) { # Inhalt der XML-Date in $xml laden [xml]$xml = Get-Content $xmlobjekt.FullName # Für jedes Element in der XML Datei unter 'Server' durchlaufen foreach ($server in (Select-Xml -Xml $xml -XPath '//Server')) { # Falls in FVALUE ein ; ist if ($server.Node.Informationen.FVALUE -like "*;*") { # FVALUE neu setzten auf Inhalt vor ; $server.Node.Informationen.FVALUE = "*" } # Speichern der XML Datei am ursprünglichen Ort $xml.Save($xmlobjekt.FullName) } } # Direkt Dateien nach Text durchsuchen und ersetzen foreach ($datei in $allexml) { # Kompletten Inhalt der Datei in Variabel laden $text = Get-Content $datei.FullName # Variabel neu schreiben und Freiburg durch Hamburg ersetzen $text = $text.Replace("*;*","*") # Schreiben des Inhaltes von $Text in die ursprüngliche Datei Set-Content $datei.FullName $text } versuche gerade hierrüber annähernd irgendwas Funktionierendes hinzubekommen. Ursprünglich ging es in dem Script um Standortveränderung. Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 17. September 2021 Melden Teilen Geschrieben 17. September 2021 OK - Hausaufgabe also. Da fällt es dann ja sowieso erst recht flach, dass Du hier was Fertiges bekommst. Und Dein Ausbilder würde mich bestimmt auch im Traum heimsuchen, wenn ich Dir das, was Du im Netz gefunden hast, einfach für Deine Aufgabe passend machen würde. Du sollst es ja schließlich verstehen/lernen. Ich würde Dir also empfehlen, Deine Aufgabe in einzelne kleine überschaubare Teile zu zerlegen und diese aufeinander aufbauend in Dein Skript einzubauen. Als ersten Teil würde ich vorschlagen, dass Du Dir alle XML-Dateien im gewünschten Verzeichnis auslisten lässt. Wenn der Schritt funktioniert und Du es verstanden hast, wie und warum es funktioniert, erweiterst Du um den nächsten Schritt ... usw. Und bitte nicht jede einzelne Zeile kommentieren - das ist zu viel. PowerShell-Code ist ziemlich "sprechend". Jeder, der auch nur annähernd der englischen Sprache mächtig ist, kann sich vorstellen, dass man z.B. mit "Get-Content" den Inhalt eines Objektes erhält. Und bitte, wenn Du hier Code postest, formatier den doch bitte auch als Code. Danke schon mal im Voraus. Zitieren Link zu diesem Kommentar
daabm 1.354 Geschrieben 17. September 2021 Melden Teilen Geschrieben 17. September 2021 vor 6 Stunden schrieb Proll012: <Anfang> XYZ; 22 </ende> Nur so als Randbemerkung: Das ist kein XML... Zitieren Link zu diesem Kommentar
Proll012 0 Geschrieben 21. September 2021 Autor Melden Teilen Geschrieben 21. September 2021 Guten Morgen, bin ein bisschen weiter, trotzdem tut das Programm noch nicht so richtig. es wird eine leere Ausgabedatei erzeugt aber es gibt keine Änderungen am Original. Nochmal zum Ziel: Das Programm soll in einer xml Datei nach <FVALUE> suchen und den Inhalt z.B:<FVALUE>XYZ; 52; green</FVALUE>, beim Semikolon trennen. Dann sollen die Schnipsel in neuen Zeilen wieder in <FVALUE> verpackt werden. <FV>XYZ</FV> <FV>52</FV> <FV>green</FV> @echo off chcp 65001 >nul set "XMLFile=DE_nv2045" set "outFile=new.%XMLFile%" (call ) >"%outFile%" for "tokens=1* delims=]" %%a in ('type "%XMLFile%"^|find /v /n ""') do ( echo %%b|find /i "<FVALUE>" && ( for /f "tokens=1* delims=;" %%f in ("%%b") do ( >>"%outFile%" echo %%f^</FVALUE^> >>"%outFile%" echo ^<FVALUE^>%%g ) ) || ( >>"%outFile%" echo:%%b ) ) Zitieren Link zu diesem Kommentar
MurdocX 950 Geschrieben 21. September 2021 Melden Teilen Geschrieben 21. September 2021 vor 50 Minuten schrieb Proll012: @echo off chcp 65001 >nul set "XMLFile=DE_nv2045" set "outFile=new.%XMLFile%" (call ) >"%outFile%" for "tokens=1* delims=]" %%a in ('type "%XMLFile%"^|find /v /n ""') do ( ... Hallo Proll012, du solltest dich auf eine Scriptsprache festlegen. Schreibst du das jetzt in der 20+ Jahre alten Batch oder in der Powershell? Zitieren Link zu diesem Kommentar
Proll012 0 Geschrieben 21. September 2021 Autor Melden Teilen Geschrieben 21. September 2021 (bearbeitet) ursprünglich Batch, kann aber seit gerade auch Powershell nutzen. Wenn mir da jemand helfen kann das anzupassen wäre das extrem nett. bearbeitet 21. September 2021 von Proll012 Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 21. September 2021 Melden Teilen Geschrieben 21. September 2021 vor einer Stunde schrieb Proll012: Wenn mir da jemand helfen kann das anzupassen wäre das extrem nett. Das hatten wir ja weiter oben ja bereits begonnen. Poste doch bitte mal den PowerShell-Code, den Du hast. Dann sehen wir, wo es noch klemmt. 1 Zitieren Link zu diesem Kommentar
Proll012 0 Geschrieben 21. September 2021 Autor Melden Teilen Geschrieben 21. September 2021 (bearbeitet) Das ist der einzige Code den ich habe O.o @echo off chcp 65001 >nul set "XMLFile=DE_nv2045" set "outFile=new.%XMLFile%" (call ) >"%outFile%" for "tokens=1* delims=]" %%a in ('type "%XMLFile%"^|find /v /n ""') do ( echo %%b|find /i "<FVALUE>" && ( for /f "tokens=1* delims=;" %%f in ("%%b") do ( >>"%outFile%" echo %%f^</FVALUE^> >>"%outFile%" echo ^<FVALUE^>%%g ) ) || ( >>"%outFile%" echo:%%b ) ) echo type "%outFile%" pause bearbeitet 21. September 2021 von Proll012 Zitieren Link zu diesem Kommentar
tesso 375 Geschrieben 21. September 2021 Melden Teilen Geschrieben 21. September 2021 Das ist KEIN Powershell Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 21. September 2021 Melden Teilen Geschrieben 21. September 2021 Hmmm ... dass PowerShell eine andere Skript-Sprache ist und nicht nur ein anderes Programm, in dem Du Deine Batch-Datei ausführst, hattest Du verstanden, oder? Zitieren Link zu diesem Kommentar
Proll012 0 Geschrieben 21. September 2021 Autor Melden Teilen Geschrieben 21. September 2021 (bearbeitet) bearbeitet 21. September 2021 von Proll012 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.