Никакое решение, использующее FIND /C, не сообщает о количестве вхождений строки поиска — вместо этого оно сообщает количество строк, содержащих хотя бы одно вхождение строки поиска.
Если вы действительно хотите подсчитать количество вхождений, включая возможность более одного вхождения в одной строке, то одним из решений является использование JREPL.BAT — чисто скриптовая (гибридная JScript/пакетная) утилита командной строки для обработки текста, которая работает на любом компьютере с Windows, начиная с XP.
@echo off
setlocal
for /r %%F in (*.txt) do (
set "file= %%F"
jrepl "Microsoft" "cnt+=1; false" /l /jmatch /jbeg "cnt=0" /jend "output.WriteLine(lpad(cnt,' ')+env('file'))" /f "%%F"
)
Приведенное выше дает хорошо отформатированный и выровненный отчет с добавленными слева счетчиками слева, за которыми следует полный путь к имени файла. Я использовал опцию /L
для буквального поиска. Я определяю и использую переменную file
на тот случай, если вы встретите имя файла, содержащее '
. Если вместо этого я передам строковый литерал, то все '
придется удвоить.
Если вы хотите подавить файлы с нулевым счетчиком, вы можете просто добавить оператор if:
@echo off
setlocal
for /r %%F in (*.txt) do (
set "file= %%F"
jrepl "Microsoft" "cnt+=1; false" /l /jmatch /jbeg "cnt=0" /jend "if (cnt) output.WriteLine(lpad(cnt,' ')+env('file'))" /f "%%F"
)
Прелесть использования JREPL заключается в том, что вы можете легко удалить параметр /L
и переключиться на использование регулярного выражения, а также очень точно указать, какие строки вы ищете.
person
dbenham
schedule
21.07.2015
C:\...
)? - person Stephan   schedule 21.07.2015