peterle123
Goto Top

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:

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

Content-Key: 97708

Url: https://administrator.de/contentid/97708

Printed on: April 25, 2024 at 07:04 o'clock

Member: bastla
bastla Sep 24, 2008 at 20:08:00 (UTC)
Goto Top
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 face-wink), 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:
@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%
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:
  • Alle " />" werden entfernt
  • Alle "<" werden zu Zeilenschaltung + "<" umgewandelt
  • Alle ">" werden zu ">" + Zeilenschaltung umgewandelt
Durch die letzten beiden Vorgänge sollten alle Tags in eigenen Zeilen stehen.

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
Member: Peterle123
Peterle123 Sep 25, 2008 at 12:23:30 (UTC)
Goto Top
Hallo bastla!

Klasse! Nicht nur eine schnelle und einfache, sondern auch portable Lösung!

vielen Dank! face-smile