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

[文本处理] 批处理如何计算目录中含NG字符的文本个数?

请问,D:\log目录中有3000个文本,命名无规则。

如何计算这3000个文本中,有多少个文本的内容是含有“NG”字符的?

  1. for %%a in (*.txt) do find "NG" %%a&&set/A n+=1
  2. cls&call echo %%n%%
  3. pause
复制代码

TOP

前辈,我试了下,好像不行,运行完后,没有统计结果出来。
文本的名字:A1853361A 0036133-1213_201204171621.txt
文本的内容:
0,2012041716212569,1A01STS00-600-G,A1853361A 0036133-1213,0,NG
0,2012041716212569,1A01STS00-600-G,A1853361A 0036133-1213,4,OK
1,2012041716212569,1A01STS00-600-G,A1853361A 0036133-1213,0,NG,1,0,432,213,216,889
1,2012041716212569,1A01STS00-600-G,A1853361A 0036133-1213,0,NG,1,213,432,213,216,1044

是什么原因? 文件名过长么?  在运行的CMD窗口里看到的信息是:

TOP

for %%a in (*.txt) do find "NG" "%%a"&&set/A n+=1
cls&call echo %%n%%
pause
文件名有空格的问题,没注意。

TOP

回复 4# yangfengoo


    好用了,嘿嘿! 谢谢您!

TOP

回复 4# yangfengoo
  1. type *.txt 2>nul | find /c "NG"
复制代码

TOP

二楼代码不对。如果这样的话,所得到的n值可能远远大于内容含有ng的文本数,因为,文本是分行解析的。

TOP

  1. @echo off
  2. for %%i in (*.txt) do (
  3.    set "flag="
  4.    find /i "ng" "%%i">nul 2>nul&&(
  5.      if not defined flag set /a n+=1
  6.      set flag==
  7.    )
  8. )
  9. echo %n%
  10. pause
复制代码

TOP

回复 7# lvsehuaxue


    能否给点测试数据来证明2楼代码什么情况下会出错?

TOP

  1. findstr /m NG *.txt | find /c /i "txt"
复制代码
1

评分人数

TOP

回复 6# gawk


    赞同这样简单的代码。亲们,不要老for啊

TOP

回复 9# gawk
经过测试2楼不错,我画蛇添足。

TOP

返回列表