Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch - HTML tags entfernen

Frage Entwicklung Batch & Shell

Mitglied: Peterle123

Peterle123 (Level 1) - Jetzt verbinden

24.09.2008, aktualisiert 25.09.2008, 5405 Aufrufe, 2 Kommentare

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:

01.
<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> /> 
02.
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> /> 
03.
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> /> 
04.
Backup has succeeded. /> 
05.
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:

01.
Incremental Backup 
02.
From: Drive F 
03.
To File: Y:\Backupfile.dat 
04.
Speed: Normal 
05.
 
06.
Backup Part 1 of 2 
07.
Creating Structure 
08.
Hard disk: 2 
09.
Drive letter: F: 
10.
File system: NTFS 
11.
Volume label: BACKUP 
12.
Size: 372,6 GB 
13.
 
14.
Backup Part 2 of 2 
15.
Saving structure 
16.
Hard disk: 2 
17.
 
18.
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!!
Mitglied: bastla
24.09.2008 um 22:08 Uhr
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:
01.
@echo off & setlocal 
02.
set "In=Z:\Log_Unicode.txt" 
03.
set "T=%temp%\Log_ASCII.txt" 
04.
set "Out=Z:\L.txt" 
05.
 
06.
type "%In%">%T% 
07.
set R=%temp%\RemoveTags.vbs 
08.
>%R%  echo Inhalt=CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll 
09.
>>%R% echo Zeilen=Split(Replace(Replace(Replace(Inhalt," />",""),"<",vbCrLF^&"<"),">",">"^&vbCrLF),vbCrLF):Inhalt="":For i=0 To UBound(Zeilen) 
10.
>>%R% echo If InStr(Zeilen(i),"<")+InStr(Zeilen(i),">")=0 Then If Trim(Zeilen(i))^<^>"" Then Inhalt=Inhalt^&^vbCrLF^&^Trim(Zeilen(i)) 
11.
>>%R% echo Next:WScript.Echo Replace(Mid(Inhalt,3),":"^& vbCrLF,": ") 
12.
 
13.
cscript //nologo %R% %T%|findstr /v /c:"ECHO ist eingeschaltet (ON)">"%Out%"  
14.
del %R% 
15.
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
Bitte warten ..
Mitglied: Peterle123
25.09.2008 um 14:23 Uhr
Hallo bastla!

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

vielen Dank!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...