在文件中查找字符串的出现并显示" filename - count"通过批处理文件

时间:2015-07-21 12:50:05

标签: batch-file command-line find findstr

批处理文件,用于搜索目录中的每个子文件夹和每个文件,并计算每个文件中特定字符串的出现次数。

如果输出为" filename - count"。

,则会很有用

可以找到/ c" Microsoft" *。文本  如果所有文件都在一个文件夹中,则此方法有效。

如何使查找循环遍历所有子文件夹及其每个文件并显示相同的结果。

Findstr有/ s这样做,不适用于查找。

3 个答案:

答案 0 :(得分:1)

从命令行:

for /F "delims=" %G in ('findstr /I /S /M "Microsoft" "%CD%\*.txt"') do @find /I /C "Microsoft" "%~G" | findstr /V /R "^$"

从批处理脚本:

set "_srch=Microsoft"
for /F "delims=" %%G in ('
       findstr /I /S /M "%_srch%" "%CD%\*.txt"') do (
    find /I /C "%_srch%" "%%~G" | findstr /V /R "^$"
)

省略%CD%\你会获得相对路径。

要从----------输出(命令行)中删除find

for /F "delims=" %G in ('findstr /I /S /M "Microsoft" "%CD%\*.txt"') do @for /F "tokens=1,*" %H in ('find /I /C "Microsoft" "%~G"') do @echo %I

资源:输入for /?find /?findstr /?set /?或转到An A-Z Index of the Windows CMD command line

答案 1 :(得分:1)

没有使用FIND / C的解决方案报告搜索字符串的出现次数 - 而是报告包含至少一次搜索字符串的行数。

如果你真的想要计算出现次数,包括在一行上出现多次事件的可能性,那么一种解决方案是使用JREPL.BAT - 一个纯脚本(混合JScript /批处理)文本处理从XP开始在任何Windows机器上运行的命令行实用程序。

@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计数的文件,则只需添加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选项并切换到使用正则表达式,并且非常具体地说明您要搜索的字符串。

答案 2 :(得分:0)

for /R %%i in (*.txt) do find /c "Microsoft" "%%i"

如果要抑制计数为0的文件,只需添加|findstr /v " 0$"

即可

摆脱----------

for /f "tokens=1,*" %%a in ('for /R %%i in (*.txt^) do find /c "Microsoft" "%%i"^|findstr /v " 0$"') do echo %%b

(如果要包含count = 0的文件,请删除^|finstr /v " 0$"

这比JosefZ的答案快了大约30%。

相关问题