nohouse303
Goto Top

Per Batch HTML Text auslesen

Es gibt keine Probleme: Nur Herausforderungen!

Moin, moin,

trotz des Feiertages lässt mir mein Problem (face-smile keine Ruhe.

Ich habe in einem Verzeichnis viele HTML Dateien.

Ich muss jede via Batch nach einen Text durchsuchen.

HTML Schnipsel:
<span class="Small">M  * R+  *  * OT  * EZMM /  / 556 / C * 2 * 5.0 607</span>  

Ich muss nach "OT" suchen. Normalerweise steht da "OK".

Falls also "OT" vorhanden ist, brauche ich den Dateinamen oder wenigstens die Info das OT vorhanden ist.

Meine bisherigen versuche waren leider nicht von erfolg gekrönt.

for /f %%i in ('findstr /C:"OK" %HTML_Datei%') do set istda=1  

oder
@findStr /v /C:">  D * R+ * * OT  * EZMM /  / 711 / C * 2 * 5.0 607<" %HTML_Datei% >> A_Talla.txt  

Über Eure erneute Unterstützung würde ich mich sehr freuen.

Gruss der Nohouse303

Content-ID: 116517

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

Ausgedruckt am: 20.11.2024 um 03:11 Uhr

bastla
bastla 21.05.2009 um 09:18:27 Uhr
Goto Top
Hallo Nohouse303!

Vielleicht so:
findstr /i /m /c:"OT" "D:\Verzeichnis\*.html"
bzw wenn's genauer sein muss (* OT *):
findstr /i /m /c:"\* OT \*" "D:\Verzeichnis\*.html"
Grüße
bastla
77559
77559 21.05.2009 um 09:24:30 Uhr
Goto Top
Moin moin Nohouse303.

Deine Beispiele sind nicht sehr erhellend, muss das "OT" jetz in dem Kontext stehen oder ist das egal?

Findstr hat jedenfalls eine Macke bei der Optionen /L wenn der Suchbegriff auf der Kommandozeile steht.
Es wendet dann trotzfdem die RegEx Syntax an wobei mit Leerzeichen getrennte Begriffe alle einzeln zum Treffer führen.

Kommt der Suchbegrif aber aus einer Datei mit der /G:Suche.txt Option passiert dies nicht.

In Verbindung mit der /M Option "nur die Dateinamen ausgeben" hast du schon dein Ergebnis.
@Echo off
(Echo Was auch immer du suchst)>Suche.txt
Findstr /M /L /G:Suche.txt *.html

Gruß
LotPings
Nohouse303
Nohouse303 21.05.2009 um 13:28:49 Uhr
Goto Top
Hallo, vielen Dank für die schnellen Antworten.
Leider geht das net.
Findstr hat wohl keine Wirkung bei htm Dateien.
Also es sind htm und nicht wie beschrieben html Dateien.

@77559: Normalerweise steht in dem String immer ein OK. Unter gewissen Voraussetzungen steht halt mal ein OT drin. Immer an der selben Stelle!
Gruss der Nohouse303
77559
77559 21.05.2009 um 14:06:39 Uhr
Goto Top
Gaanz ruhig, Wir haben einen Feiertag. Nicht aufregen LotPings. Es tut weh wenn man den Kopf auf die Tischplatte haut. Nicht nochmal machen.

Du hast drei Beispiele, alle 3 durchsuchen Dateien mit der Endung html.

Wenn es diese Dateien nicht gibt kann kener der Befehle etwas finden.

Du könntest jetzt natürlich eins der Beispiele anpassen indem du mutig das l einfach wegnimmst.

Selber denken steht nicht unter Strafe, sondern ist ausdrücklich erwünscht.

Ich weiß jetzt nicht ob ich diesen Tag noch feiern kann und du bist Schuld face-sad
Nohouse303
Nohouse303 22.05.2009 um 08:31:34 Uhr
Goto Top
Das tut mir leid, das du dir das so zu Herzen nimmst.

Ich bin zwar kein Profi, aber soviel Grips habe ich schon!

Aufjeden funktionieren eure Beispiele leider nicht!

1.
findstr /i /m /c:"OT" "D:\Verzeichnis\*.htm"  

2.
Findstr /M /L /G:Suche.txt *.htm

Also, kann jemand noch was dazu beitragen ohne sich über mich lustig zu machen.
bastla
bastla 22.05.2009 um 11:13:40 Uhr
Goto Top
Hallo Nohouse303!
Aufjeden funktionieren eure Beispiele leider nicht!
Diese Aussage sollte besser so lauten:
Aufjeden funktionieren eure Beispiele mit meinen Daten leider nicht!
Zumindest liefert bei mir für das folgende Beispiel (als .htm) gespeichert
Ich muss jede via Batch nach einen Text durchsuchen.

HTML Schnipsel:
<span class="Small">M * R+ * * OT * EZMM / / 556 / C * 2 * 5.0 607</span>
jeder der dargestellten "findstr"-Befehle das gewünschte Ergebnis ...

Kannst Du daher bitte (unter Verwendung der "< code>"-Formatierung - wie in der "Formatierungshilfe" beschrieben oder nach Auswahl von "mit Zitat" für diesen Kommentar ersichtlich) einige relevante Zeilen einer Deiner Dateien posten?

Grüße
bastla
Nohouse303
Nohouse303 22.05.2009 um 15:32:55 Uhr
Goto Top
Hallo Bastla.
hier der Anfang der Datei:

<html xmlns="http://www.w3.org/TR/REC-html40"><head><title>alignment Protocol</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><link rel="stylesheet" href="css\bbrth.css" type="text/css"/><style type="text/css">  
				.page {page-break-before:always;}
			</style><style MEDIA="SCREEN">  
				.print {display:none;}
			</style><style MEDIA="PRINT">  
				.screen {display:none;}
			</style></head><body background="" text="#000000"><div CLASS="screen"><table border="0" width="100%" cellspacing="0" cellpadding="0"><tr><td width="50%" colspan="2"><nobr><H4 style="margin-bottom:1pt"><span class="HeadlineFour">protokoll</span></H4></nobr></td><td width="50%" colspan="3" rowspan="4" align="right"><img src="logos/vaglogo.gif"/></td></tr><tr><td width="50%" colspan="2"><span class="Standard">Standard (FS)</span></td></tr><tr><td width="50%" colspan="2"><small><span class="Small">  
  D * R+ * * OT  * EZMM /  / 711 / C * 2 * 5.0 607</span></small></td></tr><tr><td width="50%" colspan="2">  
.......usw.

Ich konnte es bestimmt nicht so umsetzen wie du meintest. Ich hoffe das reicht dir!

Gruss und danke der Nohouse

Ps.: Ich werde meine Formulierungen in Zukunft überdenken und präziser verfassen!
bastla
bastla 22.05.2009 um 15:49:04 Uhr
Goto Top
Hallo Nohouse303!

Dann versuch es mal mit dem folgenden Batch:
@echo off & setlocal
set "Verzeichnis=D:\Verzeichnis"  
set "Typ=htm"  
set "Liste=D:\Liste.txt"  

if exist "%Liste%" del "%Liste%"  
for %%i in ("%Verzeichnis%\*.%Typ%") do type "%%i"|findstr /i /c:"\* OT \*">nul && >>"%Liste%" echo %%i  
Grüße
bastla
Nohouse303
Nohouse303 22.05.2009 um 17:29:56 Uhr
Goto Top
Hallo Basta,
du kommst der Sache näher.
Findstr gibt folgenes aus
FINDSTR: Zeile 8 ist zu lang
FINDSTR: Zeile 10 ist zu lang

Bei einer zweiten Datei im Verzeichnis, wo für das OT ein OK drin steht schreibt die Batch neun mal folgendes:
FINDSTR: Zeile 7 ist zu lang

In der Liste.txt stehen beide Dateien, wobei wie gesagt nur in einer OT drin steht.
Hast du noch eine Idee?

Gruss Nohouse303
bastla
bastla 22.05.2009 um 17:40:50 Uhr
Goto Top
Hallo Nohouse303!
du kommst der Sache näher.
Die Information, dass Deine Dateien "UTF-8"-codiert sind, hilft dabei ...

Versuch es mit folgender Zeile 7:
for %%i in ("%Verzeichnis%\*.%Typ%") do type "%%i"|find /i "* OT *">nul && >>"%Liste%" echo %%i
Grüße
bastla
Nohouse303
Nohouse303 22.05.2009 um 18:38:50 Uhr
Goto Top
Absolute Spitzenklasse!

Top. Ich bin mehr als begeistert.

Ich musste nur noch hinter dem OT ein Leerzeichen hinzufügen und jetzt funktionieren Deine Zeilen einwandfrei.

Ein dickes Danke!

Gruss der Nohouse303

PS.: Magst du noch kurz erklären was es mit dem UTF-8 auf sich hat bevor ich den Betrag schliesse!
bastla
bastla 22.05.2009 um 19:02:48 Uhr
Goto Top
Hallo Nohouse303!
Magst du noch kurz erklären was es mit dem UTF-8 auf sich hat
Da es sich bei dieser Codierung um Unicode (siehe zB http://de.wikipedia.org/wiki/UTF-8 ) und nicht um ASCII oder ANSI handelt, kann die CMD-Shell den Inhalt der Dateien nicht unmittelbar verarbeiten - bei der Ausgabe des Dateiinhaltes mit "type" wird allerdings eine automatische Konvertierung vorgenommen, was dem dahintergeschalteten "find" das Durchsuchen dieser Ausgabe ermöglich.

Grüße
bastla
Nohouse303
Nohouse303 22.05.2009 um 19:52:43 Uhr
Goto Top
Danke für die Info.
Ich wünsche ein schönes WE.

Gruss vom Nohouse303
nostream
nostream 28.06.2009 um 13:31:47 Uhr
Goto Top
Hallo und schönen Sonntag,

ich habe hier ein fast identisches Problem:

Ich habe einen Ordner mit über 1000 .html Dateien mit verschiedenen Dateinamen bei denen ich in jeder Datei nach einem bestimmten Tag suchen muss:

<META NAME="description" CONTENT=" hier steht beliebiger Text ">  

anschließend müsste ich nur den Teil " hier steht belieber Text " ausgeben und nach einer weiteren HTML-Codestelle im selben .html Dokument suchen:

class="artikelpreis" id="preis" style="font-weight:bold;">30,00 &euro;</span><br>  

Hier interessiert nur " 30,00 " also der Betrag in EUR.

In der Ausgabe soll also stehen " hier steht beliebiger Text " dann ein " ; " damit ich die Werte einfach in Excel in 2 Spalten importieren kann, und dann noch " 30,00 ".

Ich hab` jetzt schon mal versucht das obige Script folgendermaßen anzupassen:

@echo off & setlocal
set "Verzeichnis=C:\Dokumente und Einstellungen\nostream\Eigene Dateien\MeineSite\MeinOrdner"  
set "Typ=html"  
set "Liste=C:\Dokumente und Einstellungen\nostream\Eigene Dateien\MeineSite\Liste.txt"  

if exist "%Liste%" del "%Liste%"  
for %%i in ("%Verzeichnis%\*.%Typ%") do type "%%i"|findstr /i /c:"\* <META NAME="description" CONTENT= *  >\*">nul && >>"%Liste%" echo %%i  


Hiermit wollte ich das Tag mit der meta description auslesen, aber das Script bricht mit folgender Meldung ab:

Script:
...\Batch.vbs
Zeile: 1
Zeichen: 1
Fehler: Ungültiges Zeichen
Code: 800A0408
Quelle: Kompilierungsfehler in Microsoft VBScript


Ich wäre euch sehr, sehr dankbar, wenn Ihr das Skript zum laufen bringen würdet, da ansonten alle Infos von Hand aus den über 1000 .html Dateien herauskopiert werden müssen.

Vielen Dank schonmal,
nostream
bastla
bastla 28.06.2009, aktualisiert am 18.10.2012 um 18:38:31 Uhr
Goto Top