tylerdurden666 0 Geschrieben 23. April 2013 Melden Teilen Geschrieben 23. April 2013 HalloIch habe da ein kleines Problem:Ich habe eine xml-Datei mit verschieden tags und würde den Inhalt mittels Batch-Datei von bestimmten tags gerne in andere xml-Dateien schreiben.z.B.Inhalt der xml-Datei:<tag><hallo></tag><tag><hallo2></tag><tag><hallo3></tag>Ziel: 3 xml-Dateien mit den einzelnen Inhalten. (jede xml-Datei mit einem tag)Viele Grüße .. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 23. April 2013 Melden Teilen Geschrieben 23. April 2013 (bearbeitet) Hallo und Willkommen am Board, es soll wirklich per Batch sein? Falls man z.B. eine Textdatei zeilenweise auswerten möchte, dann eignet sich die For-Schleife mit der Textiteration /f, also for /f. Mit der Option Tokens ist ein gezieltes Auswählen möglich, falls die zu erwartenden Tags immer in der selben Spalte stehen. Auch kann man for /f kombinieren mit find oder findstr kombinieren; man kann auch schauen, ob man mit find oder findstr ohne for /f auskommt. Das ausgewertete Produkt müsste dann wohl mit dem Umleiter >> auch zeilenweise in die Zieldatei geschrieben werden. bearbeitet 23. April 2013 von lefg Zitieren Link zu diesem Kommentar
tylerdurden666 0 Geschrieben 23. April 2013 Autor Melden Teilen Geschrieben 23. April 2013 danke für die schnelle Antwort.... :) ja es sollte per Batch sein. Die gewünschten tags stehen immer in der gleichen Spalte. Ich habe versucht eine For Schleife mit findstr zu kombinieren aber ohne Erfolg, hier wäre ein Beispiel hilfreich. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 23. April 2013 Melden Teilen Geschrieben 23. April 2013 (bearbeitet) for /f "tokens=*" %%i in (\\0SERVER\Software\Bordwechsel\Bordwechsel_WindowsXP\readme.TXT) do echo %%i pause Die Zeilen der Textdatei werden gelesen, der Asterix von Tokens erlaubt die Auswertung der ganze Zeile, die Zeile wird mit Echo auf dem Bildschirm ausgegeben. for /f "tokens=*" %%i in (\\0SERVER\Software\Bordwechsel\Bordwechsel_WindowsXP\readme.TXT) do echo %%i >> c:\Zieldatei.txt pause Der Umleiter >> schreibt in die Zieldatei. danke für die schnelle Antwort.... :) ja es sollte per Batch sein. Die gewünschten tags stehen immer in der gleichen Spalte. Ich habe versucht eine For Schleife mit findstr zu kombinieren aber ohne Erfolg, hier wäre ein Beispiel hilfreich. Du willst also nach einem bestimmen Begriff suchen und falls der gefunden, was dann? Nach meiner Erinnerung übergibt man den zu suchenden Begriff mit der Pipeline (|) an find oder findstr. Ich habe das im Einzelnen nicht mehr present. Ich muss mich jetzt erst mal einer anderen Aufgabe zuwenden. bearbeitet 23. April 2013 von lefg Zitieren Link zu diesem Kommentar
tylerdurden666 0 Geschrieben 23. April 2013 Autor Melden Teilen Geschrieben 23. April 2013 ja genau, ich will also den Text zwischen [ <tag> ..... </tag> ] in eine andere xml-Datei kopieren und das für jeden <tag> in eine neue Datei. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 23. April 2013 Melden Teilen Geschrieben 23. April 2013 (bearbeitet) Ich habe jetzt, heute wohl leider keine Zeit mehr. Schau dir folgendes mal an, probiere es mal aus, ob es dir hilft! for /f "tokens=1" %%i in (\\0SERVER\Software\Bordwechsel\Bordwechsel_WindowsXP\readme.TXT) do echo %%i|findstr "gesuchter Begriff"pause Zu sehen ist, die Echo-Ausgabe wird mit der Pipe an findstr übergeben, bei Auffinden des Suchbegriffs erfolgt eine Ausgabe. Schau auch die Parameter zu findstr an, findstr /? Beachte bitte, ich habe hier Tokens=1 gesetzt, es wird also nur das erste Token der Zeile in die Variable %%i gebracht. for /f "tokens=*" %%i in (\\0SERVER\Software\Bordwechsel\Bordwechsel_WindowsXP\readme.TXT) do echo %%i|findstr "Windows"pause Tokens=* findstr "Windows" Mit diesem Beispiel werden Zeilen ausgegeben, die das Wort Windows enthalten. bearbeitet 23. April 2013 von lefg Zitieren Link zu diesem Kommentar
tylerdurden666 0 Geschrieben 23. April 2013 Autor Melden Teilen Geschrieben 23. April 2013 habe es mal ausprobiert. Er meldet hier hauptsächlich diesen Fehler in der cmd-Ausgabe Z:\Batch>echo </TestModule> | findstr "TestCase"Syntaxfehler. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 23. April 2013 Melden Teilen Geschrieben 23. April 2013 Und wie ist es, wenn die beiden Dateien sich in C:\ befinden? Du kannst den Text der Batch hier auch einstellen zur Ansicht. Zitieren Link zu diesem Kommentar
tylerdurden666 0 Geschrieben 23. April 2013 Autor Melden Teilen Geschrieben 23. April 2013 (bearbeitet) Beide Dateien befinden sich in C: Inhalt der Batch-Datei: for /f "tokens=*" %%i in (test.rxtco) do echo %%i|findstr "TestCase"pause CMD-Ausgabe: "<" ist syntaktisch an dieser Stelle nicht verarbeitbar. C:\>echo </TestModule> | findstr "TestCase" Syntaxfehler. C:\>echo <TestModule name="LBasic_ClickButton"> | findstr "TestCase" Syntaxfehler. bearbeitet 23. April 2013 von tylerdurden666 Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 23. April 2013 Melden Teilen Geschrieben 23. April 2013 (bearbeitet) Wie wäre es, es mit einer einfacheren Test.txt zu probieren? Ich habe mir auch etwas einfaches rausgesucht. Ich habe die Batch auf dem Desktop. bearbeitet 23. April 2013 von lefg Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 23. April 2013 Melden Teilen Geschrieben 23. April 2013 Ich hätte jetzt schon lang auf Powershell umgestellt. Powershell kann XML ohne das man selbst etwas parsen muss. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 23. April 2013 Melden Teilen Geschrieben 23. April 2013 (bearbeitet) Ich hätte jetzt schon lang auf Powershell umgestellt. Powershell kann XML ohne das man selbst etwas parsen muss. Nun, ich habe den TO in meinem ersten Beitrag gefragt, ob es tatsächlich Batch sein soll. Ob er eine Lösung in PS haben möchte und Du ihm dabei hilfst? Inhalt der Batch-Datei: for /f "tokens=*" %%i in (test.rxtco) do echo %%i|findstr "TestCase" pause Was ist .rxtco? bearbeitet 23. April 2013 von lefg Zitieren Link zu diesem Kommentar
tylerdurden666 0 Geschrieben 23. April 2013 Autor Melden Teilen Geschrieben 23. April 2013 (bearbeitet) Danke für die Antworten. .rxtco wird von einem bestimmten Programm erstellt. Es kann als normale Textdatei behandelt werden. Es geht auch Powershell aber davon habe ich garkeine Ahnung. Habe jetzt mal eine kleine Beispiel-Datei angehängt. Diese soll nun in folgendes aufgesplittet werden: Ziel1.xml<Tag name = "Tag1"><Modul name= "Modul1"><Data name= "Data1"></Data></Modul></Tag> Ziel2.xml<Tag name = "Tag2"><Modul name= "Modul2"><Data name= "Data2"></Data></Modul></Tag> Ziel3.xml<Tag name = "Tag3"><Modul name= "Modul3"><Data name= "Data3"></Data></Modul></Tag> Inhalt.xml bearbeitet 23. April 2013 von tylerdurden666 Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 23. April 2013 Melden Teilen Geschrieben 23. April 2013 (bearbeitet) Tscha, das sieht nicht gut aus, es liegt an <>, die beiden Zeichen können nicht verarbeitet werden. Das sind natürlich Steuerzeichen. Ich muss mal schauen, ob es an for liegt oder an findstr. Also, es scheint an findstr zu liegen oder in der Kombination, der Pipe. Die beiden Steuerzeichen machen aber auch nach set in eine Variable und anschliessenden echo Probleme, die Batch schließt kommentarlos. bearbeitet 23. April 2013 von lefg Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 23. April 2013 Melden Teilen Geschrieben 23. April 2013 Du hast eine xml Datei und diese soll pro Tag aufgeteilt werden? Woher nimmst du den Namen der Datei? Aus dem Zähler des Tags? Folgender Code sollte mit Powershell funktionieren (ungetestet). # Variablen $src = 'C:\Temp\xmlfile.xml'$dst = 'D:\Daten' # In Xml konvertieren, welches die Powershell versteht:$xml = '<file>' $xml += Get-Content $src $xml += '</file>' $xml = [xml]$xml # Aufteilen und exportieren $xml.file.tag | % { $filename = $_.Name.replace('Tag','Ziel') $value = $_.OuterXml Set-Content -Value $value -Path "$dst\$filename.xml" } 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.