Jump to content

Batch Textverarbeitung


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

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

Link zu diesem Kommentar

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
Link zu diesem Kommentar

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
Link zu diesem Kommentar

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
Link zu diesem Kommentar

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
Link zu diesem Kommentar

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
Link zu diesem Kommentar

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
Link zu diesem Kommentar

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
Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...