Проверьте каждую строку в текстовом файле на наличие подстроки

Я долго искал и не нашел что-то полезное для своей проблемы. Это может звучать просто, я был бы очень рад, если бы кто-нибудь мог мне помочь:

Я хочу написать пакетный скрипт, который проверяет каждую строку в текстовом файле, содержит ли она определенную подстроку. Если это так, вся строка, содержащая эту подстроку, должна быть распечатана. Строки, которые я ищу, заключены в двойные кавычки.

Мой код работает только для всех строк моего текстового файла, но он мне нужен для всех строк.

Спасибо заранее!

@echo off
setlocal enableextensions enabledelayedexpansion
    for /f "delims=" %%A in ('findstr "somesubstring" "textfile.txt"') do (
        echo %%A 
    )

2 ответа

Возможно, это то, что вы хотите?

@echo off
setlocal enabledelayedexpansion

set "substring=somesubstring"
for /f "delims=" %%A in ('findstr "%substring%" "textfile.txt"') do (
   for %%B in (%%A) do (
      set "string=%%~B"
      if "!string:%substring%=!" neq "!string!" echo %%B
   )
)

Этот файл Bath может завершиться ошибкой, если символы вне "строк" ​​(не заключенные в кавычки) являются специальными пакетными символами.

Сначала я бы использовал инструмент для выделения каждой строки в одной строке. Затем вы можете использовать FINDSTR для возврата только строк в кавычках, которые содержат подстроку

Самая хитрая часть - это изоляция цитируемых строк. Моя утилита поиска и замены регулярных выражений REPL.BAT - хороший вариант. Это гибридный JScript/ пакетный скрипт, который будет работать на любом современном компьютере с Windows начиная с XP.

type "textfile.txt" | repl (\q.*?\q) \r\n$1\r\n x | findstr /x ^"\".*substring.*\"^"

Если вы хотите видеть свои строки без заключенных в кавычки, то:

for /f delims^=^ eol^= %%A in (
  'type "textfile.txt" ^| repl (\q.*?\q) \r\n$1\r\n x ^| findstr /x ^"\".*substring.*\"^"'
) do echo %%~A
Другие вопросы по тегам