ricerca findstr incluso carattere di ritorno


0

C'è un modo che posso usare findstrper cercare:

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

Devo cercare una stringa che includa una seconda riga. Ho provato qualcosa del genere:

@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

dove contiene test.txt:

oh
hello
there
friends
how are
you

Ma non è innescato.


1
Questa risposta potrebbe funzionare per te.
Worthwelle,

Penso che sia la chiave per quello che sto cercando, ma come posso personalizzarlo per cercare una corrispondenza specifica in un file di testo? Non riesco a capire dove l'autore sta impostando la stringa di ricerca. @Worthwelle
Mark Deven,

La stringa di ricerca è nella riga for /f "delims=" %%A in ('cmd /v:on /c^"findstr /rc:"Item No\. .*^!CR^!*^!LF^!.* Exception: " %file%^"') do (. Specificamente, "Item No\. .*^!CR^!*^!LF^!.* Exception: ". È ^!CR^!*^!LF^!"Ritorno a capo" e "Avanzamento riga", utilizzati da Windows per indicare la fine di una riga.
Worthwelle,

Ok, la modifica non sembra funzionare. A cosa servono le altre linee nel ciclo for? Voglio solo sapere se c'è una corrispondenza.
Mark Deven,

Risposte:


1

Scopri se ci sono corrispondenze

@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

Questo file batch aggiunge un segno di spunta per il carattere Ritorno a capo, necessario per i file di testo con newline in stile Windows ( CR LF). Funziona anche findstrin un cmdprocesso separato con Espansione ritardata abilitata. Ciò sembra essere necessario, anche se l'espansione ritardata è già abilitata.

Infine, questo include due variabili: line1e line2, che possono essere modificate. Ciò rende il file più leggibile per la modifica in futuro. Puoi anche includere le stesse variabili delle espressioni regolari in questo, quindi hell.corrispondere hello, ecc.

Trova il numero di partite

@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

La differenza notevole qui è che for /fcirconda la ricerca e set /A results+=1, che aggiunge 1 alla resultsvariabile per ogni corrispondenza trovata.

Ulteriori letture:


Posso votare affinché questa sia la domanda dell'anno? : D
Mark Deven,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.