Board logo

标题: [文本处理] 批处理如何计算目录中含NG字符的文本个数? [打印本页]

作者: sinokaire    时间: 2012-5-10 09:43     标题: 批处理如何计算目录中含NG字符的文本个数?

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

如何计算这3000个文本中,有多少个文本的内容是含有“NG”字符的?
作者: yangfengoo    时间: 2012-5-10 10:28

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

作者: sinokaire    时间: 2012-5-10 11:08

前辈,我试了下,好像不行,运行完后,没有统计结果出来。
文本的名字: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窗口里看到的信息是:
作者: yangfengoo    时间: 2012-5-10 11:23

for %%a in (*.txt) do find "NG" "%%a"&&set/A n+=1
cls&call echo %%n%%
pause
文件名有空格的问题,没注意。
作者: sinokaire    时间: 2012-5-10 12:05

回复 4# yangfengoo


    好用了,嘿嘿! 谢谢您!
作者: gawk    时间: 2012-5-10 12:58

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

作者: lvsehuaxue    时间: 2012-5-10 21:38

二楼代码不对。如果这样的话,所得到的n值可能远远大于内容含有ng的文本数,因为,文本是分行解析的。
作者: lvsehuaxue    时间: 2012-5-10 21:49

  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
复制代码

作者: gawk    时间: 2012-5-10 22:10

回复 7# lvsehuaxue


    能否给点测试数据来证明2楼代码什么情况下会出错?
作者: powerbat    时间: 2012-5-11 06:22

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

作者: 秋风·飞扬    时间: 2012-5-11 10:49

回复 6# gawk


    赞同这样简单的代码。亲们,不要老for啊
作者: lvsehuaxue    时间: 2012-5-12 11:35

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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2