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?
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?
Please also mark the comments that contributed to the solution of the article
Content-Key: 148674
Url: https://administrator.de/contentid/148674
Printed on: May 4, 2024 at 10:05 o'clock
11 Comments
Latest comment
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
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
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
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
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)
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
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:
Gruß Phil
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