Никакое решение, использующее 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
на всякий случай, если вы используете имя файла, содержащее '
. Если я передам строковый литерал вместо этого, то все '
придется удвоить.
Если вы хотите, чтобы подавить файлы с 0 счета, то вы можете просто добавить, если заявление:
@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
и переключиться на использование регулярных выражений , и быть очень конкретным относительно того, какие строки вы ищете.
полный путь (начиная с 'C: \ ...') нормально для вас? – Stephan
Да, Стефан, это было бы прекрасно. – macro32
Обратите внимание - FIND/C сообщает количество ** строк **, содержащих строку поиска ***, а не *** количество вхождений. – dbenham