[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何批量统计文本文件里指定数字出现次数?

比如要统计文件夹0内每个文本文件中941的各自出现次数,结果存入 “统计.txt”,格式类似于附件即可。请问如何编程?

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('findstr "\<941\>" *.txt') do (
  3.     set "str=%%~na"
  4.     set /a #!str:+=@!+=1
  5. )
  6. (for /f "tokens=1-2 delims=#=" %%a in ('set #') do (
  7.     set "str=%%a:%%b"
  8.     echo,!str:@=+!
  9. ))>all.txt
复制代码
1

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

本帖最后由 apang 于 2014-9-28 20:43 编辑

我也来一下:
  1. @echo off & setlocal enabledelayedexpansion
  2. pushd "0\"
  3. set n=1
  4. (for /f "tokens=1,2 delims=:" %%a in ('findstr "\<941\>" *.txt') do (
  5.         if defined a (
  6.                 if /i "%%~na" NEQ "!a!" (
  7.                         echo,!a!:!n!&set n=1
  8.                 ) else set /a n+=1
  9.         )
  10.         set "a=%%~na"
  11. ))>..\统计.txt
  12. echo,!a!:!n!>>..\统计.txt
  13. pause
复制代码

TOP

突然发现 本题用 find 比 findstr 要方便得多
  1. @echo off
  2. pushd "0\"
  3. (for /f "tokens=* delims=- " %%a in ('find /c "941" *.txt') do (
  4.         echo,%%a
  5. ))>"%~dp0统计.txt"
  6. pause
复制代码
1

评分人数

    • xxpinqz: 还真是啊,习惯性用findstr.技术 + 1

TOP

话说这好像是 grep 的原生格式:
  1. @grep -c "941" *.txt>"%~dp0统计.txt"
复制代码

TOP

本帖最后由 ysrr2011 于 2014-11-10 00:25 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /L %%i in (000,1,999) do (
  3. for /f "delims=" %%a in ('findstr "\<%%i\>" *.txt') do (
  4.     set "str=%%~na"
  5.     set /a #!str:+=@!+=1
  6. )
  7. (for /f "tokens=1 delims=#=" %%a in ('set #') do (
  8.     set "str=%%a“
  9.     echo,!str:@=+!
  10. )))>"统计%%i.txt"
复制代码
如果不需要统计次数,只提取含该数值的文件,
以上程序尝试统计一组数值,执行结果的问题是
1:000-099的数值,无法运算,
2:100-999的数值,可以运算,但只有第一个结果正确,后面的结果会累加上前面的结果一起显示。
请问应该如何解决?

TOP

返回列表