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

[文本处理] 批处理如何统计指定目录下(包括子目录)多个文本文件各自的行数和累加一起的总行数?

本帖最后由 pcl_test 于 2016-9-7 18:25 编辑
  1. @echo off
  2. for /f "delims=" %%i in ('dir/b *.java') do (
  3. echo %%i
  4. for /f "usebackq" %%j in ("%%i") do  set/a n=n+1
  5. )
  6. echo 总行数:%n%
  7. pause
复制代码
上面只能运算一个目录,对子目录没办法
请求修改.

最好能告诉为什么那么改.

本帖最后由 pcl_test 于 2016-9-7 19:54 编辑
  1. //&cls&dir /a-d/b/s *.java|cscript -nologo -e:jscript "%~f0"&pause&exit
  2. var fso = new ActiveXObject('Scripting.FileSystemObject');
  3. var blank = 1;  //设置是否统计空白行,0为不统计,1为统计
  4. if(!/^[01]$/.test(blank)){WSH.echo('参数有误!');WSH.quit()}
  5. var s=f=fd=0, arr={};
  6. var endstr = '=========================================\r\n'
  7. while(!WSH.StdIn.AtEndOfStream){
  8.     var file = WSH.StdIn.ReadLine();
  9.     var fpath = fso.GetParentFolderName(file);
  10.     if(!fpath)fpath = '当前目录/文件夹';
  11.     if(!arr[fpath]){
  12.         arr[fpath]={};
  13.         arr[fpath]['list']=[];
  14.         arr[fpath]['lines']=0;
  15.         arr[fpath]['files']=0;
  16.     }
  17.     var m = GetLineCount(file, blank);
  18.     arr[fpath]['list'].push('['+m+']'+file.replace(/^.+\\/,''));
  19.     arr[fpath]['lines']+=m;
  20.     arr[fpath]['files']++;
  21. }
  22. for(var b in arr){
  23.     WSH.echo(b);
  24.     fd++;
  25.     for(var i=0; i<arr[b]['list'].length; i++){
  26.         WSH.echo(arr[b]['list'][i]);
  27.     }
  28.     s+=arr[b]['lines'];
  29.     f+=arr[b]['files'];
  30.     WSH.echo('['+arr[b]['files']+'个文本文件'+(blank?'包括空白行':'不包括空白行')+'共'+arr[b]['lines']+'行]\r\n');
  31. }
  32. WSH.Echo(endstr+fd+'个文件夹'+f+'个文本文件'+(blank?'包括空白行':'不包括空白行')+'共'+s+'行');
  33. function GetLineCount(file, blank){
  34.     var m=0;
  35.     var f = fso.OpenTextFile(file, 1);
  36.     try{
  37.         while(!f.AtEndOfStream){
  38.             var line = f.ReadLine();
  39.             if(blank){
  40.                 m++;
  41.             }else{
  42.                 if(!/^[ \s]*?$/.test(line))m++;
  43.             }
  44.         }
  45.     }catch(e){}
  46.     f.Close();
  47.     return m;
  48. }
复制代码

TOP

本帖最后由 pcl_test 于 2016-9-7 19:10 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('dir /ad/b/s^|sort /r') do (
  3.     if exist "%%a\*.java" (
  4.         echo;%%a
  5.         pushd "%%a"
  6.         set t=0
  7.         for /f "tokens=1* delims=:" %%a in ('find /c /v "" *.java') do (
  8.             echo;%%a%%b
  9.             set /a t+=%%b
  10.         )
  11.         echo;!t!
  12.         set /a s+=t
  13.         popd
  14.     )
  15. )
  16. echo;===================
  17. echo;总%s%
  18. pause
复制代码
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/b/s *.java') do (
  3.     for /f "tokens=1,2* delims=:" %%b in ('find /c /v "" "%%a"') do (
  4.         if "%%d" neq "" (
  5.             echo;%%b:%%c%%d
  6.             set /a s+=%%d
  7.         ) else (
  8.             echo;%%b%%c
  9.             set /a s+=%%c
  10.         )
  11.     )
  12. )
  13. echo;====================================
  14. echo;总%s%
  15. pause
复制代码

TOP

本帖最后由 pcl_test 于 2016-9-7 21:25 编辑

第三方http://www.bathome.net/s/tool/index.html?key=gawk
  1. #*&cls&(dir /a-d/b/s *.java)|gawk -f "%~f0">con&pause&exit
  2. BEGIN{
  3.     s=f=fd=0;
  4.     blank=1;  #设置是否统计空白行,0为不统计,1为统计
  5.     if(blank!~/^[01]$/){print "参数有误!";exit}
  6.     endstr="=========================================\n"
  7.     while(getline file>0){
  8.         if(!match(file, /(^.+\\)/, path))path[1]="当前目录/文件夹";
  9.         if(!arr[path[1]])arr[path[1]]=1;
  10.         n=GetLineCount(file, blank);
  11.         sub(/^.+\\/, "" ,file);
  12.         list[path[1]]=list[path[1]]"\n["n"]"file;
  13.         lines[path[1]]+=n;
  14.         files[path[1]]++;
  15.     }
  16.     for(b in arr){
  17.         ++fd;
  18.         s+=lines[b];
  19.         f+=files[b];
  20.         print b;
  21.         print substr(list[b], 2);
  22.         print "["files[b]"个文本文件"(blank?"包括空白行":"不包括空白行")"共"lines[b]"行]\n"
  23.     }
  24.     print endstr""fd"个文件夹"f"个文本文件"(blank?"包括空白行":"不包括空白行")"共"s"行"
  25. }
  26. function GetLineCount(file, blank){
  27.     m=0;
  28.     while(getline<file>0){
  29.         if(blank){m++}
  30.         else{if($0!~/^[[:space:]]*$/)m++}
  31.     }
  32.     close(file);
  33.     return m;
  34. }
复制代码

TOP

返回列表