Descubra se há alguma correspondência
@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
Esse arquivo em lote adiciona uma verificação do caractere Carriage Return, que é necessário para arquivos de texto com novas linhas no estilo do Windows ( CR LF
). Ele também executa findstr
em um processo cmd
separado com a Expansão com Atraso ativada. Isso parece ser necessário, embora a expansão atrasada já esteja ativada.
Por último, isso inclui duas variáveis: line1
e line2
, que podem ser editadas. Isso torna o arquivo mais legível para edição no futuro. Você também pode incluir as mesmas variáveis de Expressão Regular, então hell.
corresponderia a hello
, etc.
Encontre o número de correspondências
@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
A diferença notável aqui é o for /f
em torno da pesquisa e set /A results+=1
, que adiciona 1 à variável results
para cada correspondência encontrada.
Leitura adicional:
-
FINDSTR
- SS64 -
FOR
- SS64 -
SET /A
- SS64 - Capturando CR LF - StackOverflow