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!

Recommended Posts

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.

Edited by lefg
Link to comment

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.

Edited by lefg
Link to comment

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.

Edited by lefg
Link to comment

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.


 


 

Edited by tylerdurden666
Link to comment

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?

Edited by lefg
Link to comment

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

Edited by tylerdurden666
Link to comment

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.

Edited by lefg
Link to comment

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 to comment
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...