2016-10-18 6 views
1

У меня есть несколько текстовых файлов в папке. Для каждого из них я хочу найти 3 разных строки и добавить количество этих строк вместе, а затем вывести их в файл.Подсчет вхождений нескольких строк в несколько файлов

Это работает для подсчета одной строки в разных файлах:

for /f "delims==" %%a in ('dir /b "%CD%\*.txt"') do findstr /r /n "^.*SEARCH_STRING_1.*$" "%%~dpnxa" | find /c "SEARCH_STRING_1" >> "%%~dpacounts.txt" 

Это приводит к файлу со счетчиком на новую строку для каждого файла в папке. Как искать «SEARCH_STRING_1», «SEARCH_STRING_2» и «SEARCH_STRING_3», добавлять отсчеты вместе и выводить их в файл одинаково?

+1

Если одна строка содержит более чем одну строку, она должна быть расценено как один или более? –

+0

больше Я полагаю, но это не произойдет в файлах, с которыми я имею дело с – Aeon2058

ответ

2

Если линия с двумя матчами, должны считаться только один или, если нет никакой возможности строки, содержащей более чем один матч

findstr /c:"string1" /c:"string2" /c:"string3" *.txt | find /c /v "" > counts.txt 

Если одна строка может содержать более чем один матч и каждый матч должен подсчитываются

(
    findstr /c:"string1" *.txt 
    findstr /c:"string2" *.txt 
    findstr /c:"string3" *.txt 
) | find /c /v "" > counts.txt 

конечно, настроить findstr переключатели для ваших нужд

+0

, первый работает отлично, пока я не добавлю '| find/c/v "" бит. Затем он бросает кучу «процесс не может получить доступ к файлу, потому что он используется другим процессом. FINDSTR: записать ошибку'. Он отлично работает в команде, указанной мной в моем вопросе, но не с несколькими строками поиска? – Aeon2058

+0

@ Aeon2058, проверено и работает. Если мне нужно делать ставки, в командной строке есть какая-то синтаксическая проблема или у вас есть другая команда, записывающая в выходной файл. –

Смежные вопросы