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

[文本处理] 批处理获取文本特定行中的数值并根据后续行内容长度判定该数值是否加1

本帖最后由 pcl_test 于 2016-7-11 21:06 编辑

有多个文本,比如内容如下:
文本1:                                                                                       文本2:                                                                                             文本3:                                                       文本......
pallet                                                                                         pallet                                                                                                pallet
:fra                                                                                           :fra                                                                                                    :fra
keys=0                                                                                      keys=100                                                                                          keys=386
mura:position                                                                             ,ns,dnfkwehrjnweoiru                                                                         l
[url:]sdffjhgjghjyuiyuiyukjhkjhkjhkbnmhjgjfg                                ty                                                                                                      767
pat                                                                                            sdhfksjhfksjhkljg.,m.,mdfg;lkiopdfg./,m.kfgpoieprt,mfdg                       vcnm,ygyuytu.,.yu;rerteropt
sfdsfghjhghjgyhkjk                                                                     po                                                                                                     iuworieuo98798734kn..f.sdf
fghgjhgjhkhkjllkjbnfghesrtttytr                                                    /.m,vujiorkjoiwerhnkdjsfnkjshnfk                                                         .,.,pomsldjfiowuer0849///dfrt/y,/.,sdfsewr
go                                                                                            weuriouwklsjdfoisdfhkjsfhsdksdf                                                          08934lkjlskdufweklrnmlke..,sfisdijf
sdfsdf5yrtuytt4354sdfxvcxcvcvnvbnbvmnbmn,n,nm,bnvbdfdf        mpsdf                                                                                               sdlkjflskj4435345/45l34l;5

现在要获取每个文本第3行的“keys=”之后的数值N,比如文本1的值是0,文本2是100,文本3是386......
获取每个文本第3行的“keys=”后的数值N之后,然后从第4行开始对后续每行文本的长度进行判定,凡是单行长度>5(假设为5)的就在先前获取的“keys=”数值N上+1,最后将相应的文件名和对应最终的N值输出到EXCEL表中
比如文本1“keys=”之后的数值N=0,后续有第4,5,7,8,10共5行的内容长度>5,故最终N值为0+5=5
文本2 N值=100,有第4,6,8,9共4行长度>5,最终N值为100+4=104
求各位热心高手帮忙!!!

回复 11# keathaly


if defined keys echo;%%~nxa,!keys!>>"%~dp0Result.csv"
1

评分人数

TOP

回复 10# pcl_test
你说的已经试过,可以执行。有没有BAT文件放哪,执行的结果就直接存放在同一个目录下的方案?呵呵...

TOP

回复 9# keathaly

cd /d "E:\acp\rep\"

TOP

回复 8# keathaly
再向你请教一下,你写的代码的第2行我想改为:for /f "delims=" %%a in ('dir /a-d/b E:\acp\rep\*.txt') do (
目的是想该批处理文件放在任意位置均能执行,但我这样改,文件放在桌面好像就不行了,请指点下

TOP

回复 7# pcl_test
经你一说传文件的事,我突然想起来了,因为帖子是我手动一个字一个字的敲的,和我测试的文本字母有点差别,不好意思,你帮忙写的代码没有问题,我自己疏忽了,感谢!!!

TOP

回复 6# keathaly

把你测试txt文本打包发附件或网盘传上来

TOP

回复 5# pcl_test
没见到表格,呵呵... ...

TOP

回复 4# keathaly

什么意思,cmd窗口没显示结果?还是说结果没有导出到表格文件?

TOP

回复 3# pcl_test
咋看不到输出的结果啊?

TOP

本帖最后由 pcl_test 于 2016-7-11 21:15 编辑
  1. @echo off&
  2. for /f "delims=" %%a in ('dir /a-d/b *.txt') do (
  3.     setlocal enabledelayedexpansion
  4.     for /f "delims=" %%b in ('type "%%a"') do (
  5.         set /a n+=1
  6.         set "str=%%b"
  7.         if !n! equ 3 (
  8.             if "!str!" neq "!str:*keys=!" set %%b
  9.         ) else if !n! geq 4 (
  10.             if defined keys if "!str:~5!" neq "" set /a keys+=1
  11.         )
  12.     )
  13.     if defined keys echo;%%~nxa,!keys!
  14.     endlocal
  15. )
  16. pause
复制代码
1

评分人数

TOP

  1. //&cls&dir /a-d/b *.txt|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var fso = new ActiveXObject('Scripting.Filesystemobject'), s='';
  3. function CoutN(file){
  4.     var f = fso.OpenTextFile(file, 1);
  5.     try{
  6.         var txt = f.ReadAll().split(/\r\n/)
  7.         if(/^\s*?keys=(\d+)\s*$/.test(txt[2])){
  8.             var n=RegExp.$1;
  9.             for(var i=3; i<txt.length; i++){
  10.                 if(txt[i].length > 5)n++;
  11.             }
  12.             s+=fso.GetFile(file).Name+','+n+'\r\n';
  13.         }
  14.     }catch(e){}
  15.     f.Close();
  16. }
  17. while(!WSH.StdIn.AtEndOfStream)CoutN(WSH.StdIn.ReadLine());
  18. WSH.echo(s);
复制代码
1

评分人数

TOP

返回列表