Jump to content
Melde dich an, um diesen Inhalt zu abonnieren  
tylerdurden666

Batch Textverarbeitung

Empfohlene Beiträge

Hallo

Ich 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 ..

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von lefg

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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.

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von lefg

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von lefg

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von tylerdurden666

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von lefg

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von lefg

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von tylerdurden666

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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 von lefg

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

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"
}

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
Melde dich an, um diesen Inhalt zu abonnieren  

×