manu123
Goto Top

Findstr mit zwei Parametern ODER-verknüpft?

Hallo,

ich bin neu hier und habe bis jetzt eigentlich meine Probleme immer lesend lösen können. Im Moment hänge ich aber an einem Problem, das hier bislang nicht explizit beschrieben wurde. Es wäre toll, wenn ihr mir helfen könntet.

Es geht um die Verkettung von Parametern per findstr. Ich habe eine größere txt-Datei in html-Format in der Quelltext gespeichert ist.
Das Ganze sieht etwa so aus:

<td title="test123456678">
test123
...
</td>
<td>12345</td>
<td title="test456">
test456

Davor und danach sind Zeilen, die ich nicht dabeihaben will. Nun will ich die Zeilen mit dem Anfang "<td" haben und Zeilen, die kein < bzw > enthalten. Am günstigsten wären zwei findstr-Operationen, die eine mit

findstr /c:"<td"

die andere mit

findstr /v "<"

Diese beiden dann mit ODER verknüpfen, sodass beide Arten von Zeilen im Endeffekt in der richtigen Reihenfolge in einer neuen txt stehen.
Was ich gefunden habe ist folgendes:

Textzeile mit 2 Parametern auswerten

for /f "delims=" %%c in ('findstr /c:"Inserted " %1 ^|findstr /e "CSM"') do (set /a xc+=1)

was bei mir analog dann ja

for /f "delims=" %%c in ('findstr /c:"<td" %1 ^|findstr /v "<"') do echo > neu.txt

sein dürfte. Das klappt aber nicht. Habt ihr vielleicht eine Idee?

Content-Key: 148674

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

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

Member: mathe172
mathe172 Aug 10, 2010 at 09:16:20 (UTC)
Goto Top
Hallo Manu123!

Ich bin mir zwar nicht ganz sicher, aber so wie es aussieht, rufst du die Zeile ja nicht mit Parametern auf. Da aber "%1" der für den ersten Parameter steht (%2 für den zweiten usw...) und, wenn ich das richtig sehe wie es in deiner Zeile als Name der zu Durchsuchenden Datei verwendet. Versuch doch mal anstatt dem %1 den Namen der Datei mit Endung einzugeben

Mathe172
Member: pieh-ejdsch
pieh-ejdsch Aug 10, 2010 at 09:27:26 (UTC)
Goto Top
Hi Manu123,

sodass beide Arten von Zeilen im Endeffekt in der richtigen Reihenfolge in einer neuen txt stehen

im moment sucht Deine erste Anweisung alle Zeilen, welchen mit <td beginnen und in die Zweite (nach) | Anweisung zeigt die Zeilen wiederum nicht an.

mach es in etwa so:

Gruß Phil
Member: mathe172
mathe172 Aug 10, 2010 at 09:37:15 (UTC)
Goto Top
Hallo pieh-ejdsch

Vielleicht mir "OR" ? (Hab von logischen Operatoren keine Ahnung)

Mathe172
Member: pieh-ejdsch
pieh-ejdsch Aug 10, 2010 at 09:50:50 (UTC)
Goto Top
aaarg ich dachte die ODER Anweisung bekommt auch den inPut aber nöö

>"%temp%\tmp" echo "^<td   
for /f "usebackq delims=" %%i in ("D:\Meine.txt") do (echo "%%i"|findstr /b /g:"%temp%\tmp" >>neu.txt  
	echo "%%i"|findstr /v "< >">>neu.txt  
)

Gruß Phil
Member: Manu123
Manu123 Aug 10, 2010 at 09:56:37 (UTC)
Goto Top
Hallo Phil,

danke für Deine Antwort.


Eine alternative strategie wäre eventuell 2x findstr darüberlaufen zu lassen, mit dem ergebnis die zeilennummern auszugeben. dann diese 2 dateien zusammenführen und von dieser quelle aus die fertige datei zu bekommen?

grüße
Member: pieh-ejdsch
pieh-ejdsch Aug 10, 2010 at 10:04:35 (UTC)
Goto Top
Hast Du jetzt mal diese Version genommen

wenn Du das als Batch laufen lässt ist es mit %%i richtig
wenn als Befehlszeilen dann jeweils anstatt den %%i ein %i in die Zeile schreiben

Gruß Phil
Member: Manu123
Manu123 Aug 10, 2010 at 10:09:37 (UTC)
Goto Top
Ah, da warst du schneller als ich.

ich vermute tmp1 ist gleich tmp, das habe ich mal korrigiert.

"%temp%\tmp1" echo "<td"
for /f "delims=" %%i in ("Suche.txt") do (echo "%%i"|findstr /b /g:"%temp%\tmp1" >>neu.txt
echo "%%i"|findstr /v "< >">>neu.txt

)

allerdings verstehe ich nicht ganz was du im endeffekt machst .

Ergebnis ist übrigens, dass in der neu.txt

"Suche.txt"

steht. Ich verzweifle face-sad
Member: pieh-ejdsch
pieh-ejdsch Aug 10, 2010 at 11:41:43 (UTC)
Goto Top
ich vermute tmp1 ist gleich tmp, das habe ich mal korrigiert.
ja ich hatte das nur so daher geschrieben deshalb ein bisschen Fehlerbehaftet

"Suche.txt" - das war auch mein Fehler.

Ich hatte nur die For-Schleife falsch geschrieben
for /f "delims=" %%i in ("Suche.txt") do
so ist es eine For-Schleife für: "DurchAckern von Zeichenfolgen in Anführungszeichen"
  • ohne "Anführungszeichen um die (Zeichenfolge in der AnweisungsKlammer)
ist es eine For-Schleife fürs: Zeilenweise DurchAckern von Datei(en) ohne Sonder& Leerzeichen im (Pfad-) Namen

richtig ist bei eine For-schleife fürs: "Zeilenweise DurchAckern von Datei(en) mit Sonder& Leerzeichen im (Pfad-) Namen in Anführungszeichen" die verwendung von usebackq hinter /f
so hab ich es oben Korrigiert


heist im Umkerschluss
wenn Deine Du die Anführungszeichen um den "Dateinamen-ohne-Leer-und-Sonderzeichen.txt" entfernst reicht es.

[Edit]
zur Erklärung:
die Zeilen werden mit "delims=" kommplett in die Variable %%i gesetzt
mit | wird die Ausgabe vom Echo als Eingabe von Findstr genommen
in der Datei %temp%\tmp steht auch das einzelne Anführungszeichen des gesamten Suchstrings
welches mit /b /g:%temp%\tmp
vom beginn der Zeile vom Echo (auch mit Anführungszeichen am Anfang und Ende) abgeglichen wird
>> schreibt das Ergebnis vom findstr in die "neu.txt"

auch zu lesen in XP-Hife oder online unter:
Befehlzeilenreferenz A-Z
- Verwenden von Befehlsumleitungsoperatoren
- For
- Findstr
oder im CMD-Fenster mit: Befehl /?
[\Edit]

Gruß Phil
Member: Manu123
Manu123 Aug 10, 2010 at 12:29:19 (UTC)
Goto Top
Soweit so gut, vielen Dank bis hierhin.

Was ich nun als Ergebnis rausbekomme>

Aus

<td title="test123456678">
test123
...
</td>
<td>12345</td>
<td title="test456">
test456

Wird

" "
" "
" "
" test123"
" ..."
" test456"
" "

Die Leerzeichen hat er wohl im ersten Post nicht mitkopiert, aber das macht ja keinen Unterschied, die bekomme ich problemlos weg. Das Problem ist jetzt, dass ich nicht weiß woher die Anführungszeichen kommen bzw. wie ich sie wegbekomme. Außerdem sind die Zeilen mit <td am Anfang nicht kopiert worden.

grüße
Member: pieh-ejdsch
pieh-ejdsch Aug 11, 2010 at 11:10:16 (UTC)
Goto Top
Moin Manu123,

ich wollte mit dem EscapeZeichen ( ^ ) das folgende UmleitungsZeichen ( < ) fürs ECHO als Normal darzustellendes Zeichen für das ECHO einschliessen.
das hat aber nicht geklappt, weil das Führende Anführungszeichen ( " ) schon dafür gesorgt hatte. (obwohl kein Abschliessendes AnführungsZeichen vorhanden ist - grübel)

es wurde aus dem Ergebnis vom Findstr in die Datei Umgeleitet mit AnführungsZeichen, so wie die Eingabe vom Echo ist.
fürs nichtdarstellen der AnführungsZeichen vom Findstr nehmen wir ein FolgeBefehlWennPositivDann ( && )

Jetzt sogar als geteste BetaVersion:
set Eingabe="E:\AdminHelp\Test.txt"  
set Ausgabe="E:\AdminHelp\neu.txt "  
type nul>%Ausgabe%
>"%temp%\tmp" echo "<td  
for /f "usebackq delims=" %%i in (%Eingabe%) do (echo "%%i"|findstr /b /g:"%temp%\tmp" &&>>%Ausgabe% echo %%i  
	echo "%%i"|findstr /v "< >"&&>>%Ausgabe% echo %%i  
)

Gruß Phil
Member: Manu123
Manu123 Aug 11, 2010 at 11:31:48 (UTC)
Goto Top
Moin Phil,

perfekt! Danke Dir vielmals, klappt alles wunderbar face-smile