Есть ли способ, которым я могу использовать findstr для поиска:

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

Мне нужно найти строку, которая включает в себя вторую строку. Я пробовал что-то вроде этого:

@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

где test.txt содержит:

oh
hello
there
friends
how are
you

Но это не срабатывает.

1 ответ1

1

Найти, есть ли совпадения

@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 для каждого найденного совпадения.

Дальнейшее чтение:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .