findstr-Suche einschließlich Rückkehrzeichen

462
Mark Deven

Gibt es eine Möglichkeit, nach der ich findstrsuchen kann:

<char>Hello there my friend,</char> <continued>this is two lines of text</continued> 

Ich muss nach einer Zeichenfolge suchen, die eine zweite Zeile enthält. Ich habe so etwas ausprobiert:

@echo off setlocal enableDelayedExpansion set file=test.txt set LF=^   :: The above 2 blank lines MUST be preserved! findstr /RC:"hello!LF!there" "test.txt" >nul if %errorlevel%==0 echo found 1! pause 

wo test.txt enthält:

oh hello there friends how are you 

Es wird aber nicht ausgelöst.

0
Diese Antwort (https://stackoverflow.com/a/8773526/9882907) funktioniert möglicherweise für Sie. Worthwelle vor 6 Jahren 1
Ich denke, das ist der Schlüssel zu dem, wonach ich suche, aber wie kann ich das anpassen, um nach einer bestimmten Übereinstimmung in einer Textdatei zu suchen? Ich kann nicht herausfinden, wo der Autor die Suchzeichenfolge setzt. @Worthwelle Mark Deven vor 6 Jahren 0
Der Suchstring steht in der Zeile `for / f" delims = "%% A in ('cmd / v: on / c ^" findstr / rc: "Artikel Nr. \.. ^ ^! CR ^! * ^! LF ^!. * Ausnahme: "% file% ^" ') do (`. Spezifisch:` "Artikel-Nr.. * ^! CR ^! * ^! LF ^!. * Ausnahme:" `. Das` ^! CR ^! * ^! LF ^! `Ist der Wagenrücklauf und der Zeilenvorschub, den Windows verwendet, um das Ende einer Zeile anzuzeigen. Worthwelle vor 6 Jahren 0
Ok, das Editieren scheint nicht zu funktionieren. Wofür sind die anderen Zeilen in der for-Schleife? Ich möchte nur wissen, ob es eine Übereinstimmung gibt. Mark Deven vor 6 Jahren 0

1 Antwort auf die Frage

1
Worthwelle

Finden Sie heraus, ob es Übereinstimmungen gibt

@echo off setlocal enableDelayedExpansion set file=test.txt set line1=hello set line2=there set LF=^   :: The above 2 blank lines MUST be preserved! :: Define a CR variable as a CarriageReturn (0x0D) character for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"  cmd /v:on /c^"findstr /rc:"%line1%^!CR^!*^!LF^!%line2%" %file%^" >nul if %errorlevel%==0 echo found at least 1! pause 

Diese Batchdatei fügt eine Prüfung auf das Wagenrücklaufzeichen hinzu, das für Textdateien mit Zeilenumbrüchen im Windows-Stil ( CR LF) erforderlich ist . Es wird auch findstrin einem separaten cmdProzess mit aktivierter verzögerter Erweiterung ausgeführt. Dies scheint notwendig zu sein, obwohl die verzögerte Erweiterung bereits aktiviert ist.

Zuletzt enthält dies zwei Variablen: line1und line2, die bearbeitet werden können. Dadurch ist die Datei für die spätere Bearbeitung lesbarer. Sie können auch die gleichen Variablen für reguläre Ausdrücke in diese einschließen, hell.würden also übereinstimmen hellousw.

Finden Sie die Anzahl der Treffer

@echo off setlocal enableDelayedExpansion set file=test.txt set line1=hell. set line2=there set LF=^   :: The above 2 blank lines MUST be preserved! :: Define a CR variable as a CarriageReturn (0x0D) character for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"  set results=0 for /f %%a in ('cmd /v:on /c^"findstr /rc:"%line1%^!LF^!%line2%" %file%^"') do set /A results+=1 echo found %results%! pause 

Der bemerkenswerte Unterschied hier ist die for /fUmgebung der Suche und set /A results+=1, die resultsfür jede gefundene Übereinstimmung 1 zur Variablen hinzufügt .

Lesen Sie weiter:

Kann ich für diese Frage des Jahres stimmen? : D Mark Deven vor 6 Jahren 0