Bestimmte Zeilen aus xml Datein löschen
Hallo,
ich habe auf C:\Daten ca. 6000 xml Dateien und ich möchte bestimmte Zeilen per batch davon löschen.
der Script soll nach "28270" suchen, diese Zeile, die Zeile davor und danach löschen=(3 Zeilen)
dasselbe für "25222"
kann bitte jemand helfen?
hier ein Ausschnitt der xml Datei.
<XRefElement ID=" PublicationID="1783" ObjectType="X-Ref_Zusatzinfo">
<UniversalReference ID="[CDATA[<MODLINK REFID="28270" TYPE="Zusatzinfo">]]></FormattedText>
</XRefElement>
<XRefElement ID="PublicationID="1783" ObjectType="X-Ref_Zubehoer">
<UniversalReference [CDATA[<MODLINK REFID="29884" TYPE="Zubehor">]]></FormattedText>
</XRefElement>
<XRefElement ID="PublicationID="1803" ObjectType="X-Ref_Zubehoer">
<UniversalReference [CDATA[<MODLINK REFID="17479" TYPE="Zubehor">]]></FormattedText>
</XRefElement>
<XRefElement ID="PublicationID="1783" ObjectType="X-Ref_Zusatzinfo">
<UniversalReference [CDATA[<MODLINK REFID="25222" TYPE="Zusatzinfo">]]></FormattedText>
</XRefElement>
ich habe auf C:\Daten ca. 6000 xml Dateien und ich möchte bestimmte Zeilen per batch davon löschen.
der Script soll nach "28270" suchen, diese Zeile, die Zeile davor und danach löschen=(3 Zeilen)
dasselbe für "25222"
kann bitte jemand helfen?
hier ein Ausschnitt der xml Datei.
<XRefElement ID=" PublicationID="1783" ObjectType="X-Ref_Zusatzinfo">
<UniversalReference ID="[CDATA[<MODLINK REFID="28270" TYPE="Zusatzinfo">]]></FormattedText>
</XRefElement>
<XRefElement ID="PublicationID="1783" ObjectType="X-Ref_Zubehoer">
<UniversalReference [CDATA[<MODLINK REFID="29884" TYPE="Zubehor">]]></FormattedText>
</XRefElement>
<XRefElement ID="PublicationID="1803" ObjectType="X-Ref_Zubehoer">
<UniversalReference [CDATA[<MODLINK REFID="17479" TYPE="Zubehor">]]></FormattedText>
</XRefElement>
<XRefElement ID="PublicationID="1783" ObjectType="X-Ref_Zusatzinfo">
<UniversalReference [CDATA[<MODLINK REFID="25222" TYPE="Zusatzinfo">]]></FormattedText>
</XRefElement>
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 84794
Url: https://administrator.de/contentid/84794
Ausgedruckt am: 20.11.2024 um 15:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo sommerzeit und willkommen im Forum!
Wenn's auch VBScript sein darf, dann etwa so:
Zur Verwendung: Speichere das Script zB unter "C:\Scripts\RemoveLines.vbs" - falls Du mit dem Windows-Editor arbeitest, achte bitte darauf, dass Du beim Speichern den Dateinamen unter Anführungszeichen setzt, da ansonsten als ".txt" gespeichert wird.
Falls neben "28270" und "25222" noch weitere Nummern auszuscheiden wären, kannst Du diese (durch Leerzeichen getrennt) in der Zeile "Criteria = ..." innerhalb der Anführungszeichen hinzufügen.
Starten könntest Du zwar auch, indem Du die XML-Datei auf die Script-Datei ziehst (Drag & Drop), allerdings wird für Dich der Weg über die Kommandozeile mit
sinnvoller sein, da Du so in einer Schleife alle Deine Dateien bearbeiten lassen kannst.
Es wird zunächst eine Sicherungskopie (durch Hinzufügen der Endung ".bak") im selben Ordner erstellt und danach die gekürzte Version unter dem Namen der Originaldatei gespeichert.
Die erwähnte Schleife (direkt an der Kommandozeile eingegeben, oder mit %%i geschrieben als Batch) könnte etwa so aussehen:
Grüße
bastla
Wenn's auch VBScript sein darf, dann etwa so:
'RemoveLines.vbs
Criteria = Split(Trim("28270 25222"))
Bak = ".bak"
Set fso = CreateObject("Scripting.FileSystemObject")
If WScript.Arguments.Count < 1 Then
WScript.Echo "Keine Quelldatei angegeben!"
WScript.Quit 1
End If
FileOut = WScript.Arguments(0)
If Not fso.FileExists(FileOut) Then
WScript.Echo "Angegebene Quelldatei " & FileOut & " nicht gefunden!"
WScript.Quit 2
End If
FileIn = FileOut & Bak
If fso.FileExists(FileIn) Then fso.DeleteFile FileIn
fso.MoveFile FileOut, FileIn
XMLin = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(FileIn).ReadAll, vbCrLF)
U = UBound(XMLin)
i = 1
Do Until i > U
Remove = False
For Each Crit In Criteria
If InStr(XMLin(i), Crit) Then Remove = True: Exit For
Next
If Not Remove Then
XMLout = XMLout & vbCrLF & XMLIn(i - 1)
Else
i = i + 2
End If
i = i + 1
Loop
If i = U + 1 Then XMLout = XMLout & vbCrLF & XMLIn(i - 1)
fso.OpenTextFile(FileOut, 2, True).Write Mid(XMLout, 3)
Zur Verwendung: Speichere das Script zB unter "C:\Scripts\RemoveLines.vbs" - falls Du mit dem Windows-Editor arbeitest, achte bitte darauf, dass Du beim Speichern den Dateinamen unter Anführungszeichen setzt, da ansonsten als ".txt" gespeichert wird.
Falls neben "28270" und "25222" noch weitere Nummern auszuscheiden wären, kannst Du diese (durch Leerzeichen getrennt) in der Zeile "Criteria = ..." innerhalb der Anführungszeichen hinzufügen.
Starten könntest Du zwar auch, indem Du die XML-Datei auf die Script-Datei ziehst (Drag & Drop), allerdings wird für Dich der Weg über die Kommandozeile mit
cscript //nologo "C:\Scripts\RemoveLines.vbs" "C:\Daten\Eine XML-Datei.xml"
Es wird zunächst eine Sicherungskopie (durch Hinzufügen der Endung ".bak") im selben Ordner erstellt und danach die gekürzte Version unter dem Namen der Originaldatei gespeichert.
Die erwähnte Schleife (direkt an der Kommandozeile eingegeben, oder mit %%i geschrieben als Batch) könnte etwa so aussehen:
for /f %i in ('dir /b /a-d "C:\Daten\*.xml"') do @echo Bearbeite %i & @cscript //nologo "C:\Scripts\RemoveLines.vbs" "%i"
Grüße
bastla