поиск findstr, включая возвращаемый символ

340
Mark Deven

Есть ли способ, которым я могу использовать 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 

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

0
[Этот ответ] (https://stackoverflow.com/a/8773526/9882907) может работать для вас. Worthwelle 5 лет назад 1
Я думаю, что это ключ к тому, что я ищу, но как я могу настроить его для поиска указанного соответствия в текстовом файле? Я не могу понять, где автор устанавливает строку поиска. @Worthwelle Mark Deven 5 лет назад 0
Строка поиска находится в строке `for / f" delims = "%% A in ('cmd / v: on / c ^" findstr / rc: "Номер элемента \. * ^ ^! CR ^! * ^! LF ^!. * Исключение: "% file% ^" ') do (`. В частности,` "Item No \.. * ^! CR ^! * ^! LF ^!. * Исключение:" `. The ^ ^! CR ^! * ^! LF ^! `- это« Возврат каретки »и« Перевод строки », которые Windows использует для обозначения конца строки. Worthwelle 5 лет назад 0
Хорошо, редактирование не похоже на работу. Для чего нужны другие строки в цикле for? Я просто хочу знать, есть ли совпадение. Mark Deven 5 лет назад 0

1 ответ на вопрос

1
Worthwelle

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

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

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

Могу ли я проголосовать за этот вопрос года? : D Mark Deven 5 лет назад 0

Похожие вопросы