Найти, есть ли совпадения
@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
Этот пакетный файл добавляет проверку для символа возврата каретки, который необходим для текстовых файлов с символами новой строки в стиле Windows (CR LF
). Он также запускает findstr
в отдельном процессе cmd
с включенным отложенным расширением. Это кажется необходимым, хотя отложенное расширение уже включено.
Наконец, это включает в себя две переменные: line1
и line2
, которые можно редактировать. Это делает файл более читабельным для редактирования в будущем. Вы также можете включить те же переменные регулярного выражения в этом, hell.
будет соответствовать hello
и т. д.
Найти количество совпадений
@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
Заметная разница здесь заключается в том, что for /f
окружает поиск и set /A results+=1
, что добавляет 1 к переменной results
для каждого найденного совпадения.
Дальнейшее чтение: