Batch - HTML tags entfernen
Hallo Leute.
Habe nach dem Lesen unzähliger Beiträge und durch viel Probieren aus nahezu unlesbarem Unicode-Buchstabensalat in einer Log-Datei folgenden halbwegs lesbaren Text extrahiert:
nun hab ich ziemlich lange herumprobiert und kriege es einfach nicht hin, die html-tags zu entfernen (und im Anschluss das alles so zu formatieren), so dass folgender Text entsteht:
Kann jemand helfen? Wär echt ne unglaubliche Erleichterung.
Wenn möglich, würde ich den Umgang mit sed vermeiden wollen, damit das Script portabel bleibt und auch auf Systemen ohne installiertem sed lauffähig ist.
Danke schon mal!!
Habe nach dem Lesen unzähliger Beiträge und durch viel Probieren aus nahezu unlesbarem Unicode-Buchstabensalat in einer Log-Datei folgenden halbwegs lesbaren Text extrahiert:
<bold>Incremental Backup</bold><endl/><tabpoint value=30><indent value=4>From: <indent value=10><textcolor value=navyblue>Drive F</textcolor></indent><indent value=4><endl/>To file: <indent value=10><textcolor value=navyblue>Y:\Backupfile.dat</textcolor></indent><indent value=4><endl/>Speed: <indent value=10><textcolor value=navyblue>Normal</textcolor></indent><indent value=4><endl/></indent> />
Backup Part 1 of 2<endl/><tabpoint value=30><bold>Creating Structure<endl/></bold><indent value=4>Hard disk: <indent value=10>2</indent><indent value=4><endl/>Drive letter: <indent value=10>F:</indent><indent value=4><endl/>File system: <indent value=10>NTFS</indent><indent value=4><endl/>Volume label: <indent value=10>BACKUP</indent><indent value=4><endl/>Size: <indent value=10>372,6 GB</indent><indent value=4><endl/></tabpoint></indent> />
Backup Part 2 of 2<endl/><tabpoint value=30><bold>Saving structure<endl/></bold><indent value=4>Hard disk: <indent value=10>2</indent><indent value=4><endl/></indent> />
Backup has succeeded. />
ECHO ist eingeschaltet (ON).
nun hab ich ziemlich lange herumprobiert und kriege es einfach nicht hin, die html-tags zu entfernen (und im Anschluss das alles so zu formatieren), so dass folgender Text entsteht:
Incremental Backup
From: Drive F
To File: Y:\Backupfile.dat
Speed: Normal
Backup Part 1 of 2
Creating Structure
Hard disk: 2
Drive letter: F:
File system: NTFS
Volume label: BACKUP
Size: 372,6 GB
Backup Part 2 of 2
Saving structure
Hard disk: 2
Backup has succeeded.
Kann jemand helfen? Wär echt ne unglaubliche Erleichterung.
Wenn möglich, würde ich den Umgang mit sed vermeiden wollen, damit das Script portabel bleibt und auch auf Systemen ohne installiertem sed lauffähig ist.
Danke schon mal!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 97708
Url: https://administrator.de/forum/batch-html-tags-entfernen-97708.html
Ausgedruckt am: 22.05.2025 um 07:05 Uhr
2 Kommentare
Neuester Kommentar
Hallo Peterle123 und willkommen im Forum!
Batch und HTML-Tags ist (wegen "<" und ">", die ja in Batch als Umleitungszeichen eine besondere Bedeutung haben), ohnehin schon eine Sache für sich - Ersetzungen (bzw Entfernungen
), die innerhalb einer Zeile durgeführt werden sollen, machen es dann nicht einfacher ...
Konsequenz daraus: Wenn schon kein externes Tool wie "sed", dann zumindest eine Sprache verwenden, mit der Stringbearbeitung vergleichsweise schmerzlos funktioniert, nämlich VBScript. Damit das Ganze aber portabel (und das möglichst komfortabel) bleibt, bietet es sich an, das Script durch den Batch erzeugen (und wieder entfernen) zu lassen.
Soferne also VBScript zur Verfügung steht, sollte der folgende Batch aus dem Log (in Unicode) ein einigermaßen lesbares Ergebnis erzeugen:
Das enthaltene VBScript ist etwas knapp formuliert, daher eine kurze Erklärung der Vorgangsweise:
Es wird zunächst die gesamte Datei (nachdem sie per "type" aus Unicode in ASCII/ANSI umgewandelt wurde - diesen Schritt habe ich nicht getestet, sollte aber funktionieren) in einen String eingelesen, in welchem folgende Änderungen vorgenommen werden:
Als nächstes wird der Gesamtstring in einzelne Zeilen aufgeteilt. Von diesen Zeilen werden alle verworfen, welche "<" oder ">" enthalten oder (bis auf Leerzeichen) leer sind.
Die verbleibenden Zeilen werden wieder zu einem String kombiniert, in welche als letzte Anpassung jede Zeile, welche mit ":" endet, mit der folgenden Zeile, getrennt durch ein Leerzeichen, verbunden wird (was zum kleinen Schönheitsfehler führt, dass die Zeilen 9 und 10 Deines Beispieles oben - wegen des "F:" am Ende der Zeile 9 - ebenfalls zusammengefasst werden).
Das Ergebnis wird an den Batch zurückgeliefert und dort (vor dem Schreiben in die Ausgabedatei) per Filterung noch von der Zeile "ECHO ist eingeschaltet (ON)." befreit.
Noch eine Anmerkung: Sinnvoller fände ich es, an der Quelle anzusetzen und gleich ein vernünftiges Log erzeugen zu lassen ...
Grüße
bastla
Batch und HTML-Tags ist (wegen "<" und ">", die ja in Batch als Umleitungszeichen eine besondere Bedeutung haben), ohnehin schon eine Sache für sich - Ersetzungen (bzw Entfernungen
Konsequenz daraus: Wenn schon kein externes Tool wie "sed", dann zumindest eine Sprache verwenden, mit der Stringbearbeitung vergleichsweise schmerzlos funktioniert, nämlich VBScript. Damit das Ganze aber portabel (und das möglichst komfortabel) bleibt, bietet es sich an, das Script durch den Batch erzeugen (und wieder entfernen) zu lassen.
Soferne also VBScript zur Verfügung steht, sollte der folgende Batch aus dem Log (in Unicode) ein einigermaßen lesbares Ergebnis erzeugen:
@echo off & setlocal
set "In=Z:\Log_Unicode.txt"
set "T=%temp%\Log_ASCII.txt"
set "Out=Z:\L.txt"
type "%In%">%T%
set R=%temp%\RemoveTags.vbs
>%R% echo Inhalt=CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll
>>%R% echo Zeilen=Split(Replace(Replace(Replace(Inhalt," />",""),"<",vbCrLF^&"<"),">",">"^&vbCrLF),vbCrLF):Inhalt="":For i=0 To UBound(Zeilen)
>>%R% echo If InStr(Zeilen(i),"<")+InStr(Zeilen(i),">")=0 Then If Trim(Zeilen(i))^<^>"" Then Inhalt=Inhalt^&^vbCrLF^&^Trim(Zeilen(i))
>>%R% echo Next:WScript.Echo Replace(Mid(Inhalt,3),":"^& vbCrLF,": ")
cscript //nologo %R% %T%|findstr /v /c:"ECHO ist eingeschaltet (ON)">"%Out%"
del %R%
del %T%
Es wird zunächst die gesamte Datei (nachdem sie per "type" aus Unicode in ASCII/ANSI umgewandelt wurde - diesen Schritt habe ich nicht getestet, sollte aber funktionieren) in einen String eingelesen, in welchem folgende Änderungen vorgenommen werden:
- Alle " />" werden entfernt
- Alle "<" werden zu Zeilenschaltung + "<" umgewandelt
- Alle ">" werden zu ">" + Zeilenschaltung umgewandelt
Als nächstes wird der Gesamtstring in einzelne Zeilen aufgeteilt. Von diesen Zeilen werden alle verworfen, welche "<" oder ">" enthalten oder (bis auf Leerzeichen) leer sind.
Die verbleibenden Zeilen werden wieder zu einem String kombiniert, in welche als letzte Anpassung jede Zeile, welche mit ":" endet, mit der folgenden Zeile, getrennt durch ein Leerzeichen, verbunden wird (was zum kleinen Schönheitsfehler führt, dass die Zeilen 9 und 10 Deines Beispieles oben - wegen des "F:" am Ende der Zeile 9 - ebenfalls zusammengefasst werden).
Das Ergebnis wird an den Batch zurückgeliefert und dort (vor dem Schreiben in die Ausgabedatei) per Filterung noch von der Zeile "ECHO ist eingeschaltet (ON)." befreit.
Noch eine Anmerkung: Sinnvoller fände ich es, an der Quelle anzusetzen und gleich ein vernünftiges Log erzeugen zu lassen ...
Grüße
bastla