Проверьте каждую строку в текстовом файле на наличие подстроки
Я долго искал и не нашел что-то полезное для своей проблемы. Это может звучать просто, я был бы очень рад, если бы кто-нибудь мог мне помочь:
Я хочу написать пакетный скрипт, который проверяет каждую строку в текстовом файле, содержит ли она определенную подстроку. Если это так, вся строка, содержащая эту подстроку, должна быть распечатана. Строки, которые я ищу, заключены в двойные кавычки.
Мой код работает только для всех строк моего текстового файла, но он мне нужен для всех строк.
Спасибо заранее!
@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