1

Я хотел бы рекурсивно искать в родительском каталоге и во всех подкаталогах несколько отдельных строк и показывать результаты для каждой строки. Например:

Текст для поиска

Foo
Bar
Fizz
Buzz
(list continues for several hundred words)

Панель результатов

Foo
  - Found in files x, y, z
Bar
  - Found in files x, y
Fizz
  - Not found in any files
Buzz
  - Found in files y, z

Резюме
У меня есть список из нескольких сотен строк, которые мне придется искать несколько раз. Поиск отдельных строк - утомительный процесс, и я ищу способ выполнить это в пакетном процессе.

Существуют ли программы Windows, которые могут выполнять поиск такого типа?

FWIW
Я пробовал с notepad++ и Visual Studio, но не нашел способа удовлетворить требования показа каждой строки как отдельного результата.

3 ответа3

2

Следующий пакетный скрипт сделает это.

@echo off

for /F %%i in (pattern.txt) do (
echo Files containing %%i
findstr /M /C:%%i /S *.txt
)        

В случае строки, отсутствующей ни в одном из файлов, он не печатает требуемый оператор. Вместо этого он печатает пустой список файлов. источник: команда Findstr

1

Grep твой друг. Вы можете поместить шаблоны для поиска в файл с именем patterns.txt, а затем выполнить что-то вроде следующего:

grep -f patterns.txt -r * > ..\results.txt

Редактировать:

Просто наткнулся на вопрос о grep-подобных вещах, доступных в Windows. Вопрос и ответы охватывают множество бесплатных и несвободных автономных инструментов и команд, встроенных, например, в Powershell.

1

Швейцарский Файловый Нож имеет команду "hexfind", которая может искать любое количество паттернов параллельно. Создайте файл шаблона поиска «mypatterns.txt», содержащий:

/Foo/
/Bar/
/Fizz/
/Buzz/

И для поиска всех файлов папки mydir, включая все подпапки, введите:

sfk hexfind -bylist mypatterns.txt mydir

Это создаст дамп каждого найденного удара, например:

testfiles\Formats\10-dir-list.txt : hit at offset 0x273
>4261724D 75672E68 70700D0A 433A5C73< BarMug.hpp..C:\s 00000273
testfiles\Formats\10-dir-list.txt : hit at offset 0x290
>466F6F42 616E6B5C 42617244 72697665< FooBank\BarDrive 00000290

Чтобы получить список только имен файлов, содержащих совпадения, добавьте опцию -nodump. Это не даст точную панель результатов, как вы просили, но, по крайней мере, вы увидите, где встречаются ваши шаблоны.

Если создать файл mypatterns.txt с форматом // сложно, вы можете создать файл из wordlist.txt, например:

sfk filter wordlist.txt -form "/$col1/" +tofile mypatterns.txt

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