Board logo

标题: [文件操作] 批处理如何实现对文件夹包括子文件夹下所有类型的文件分别统计数量和总大小 [打印本页]

作者: zhou_196    时间: 2016-4-28 10:33     标题: 批处理如何实现对文件夹包括子文件夹下所有类型的文件分别统计数量和总大小

本帖最后由 pcl_test 于 2016-4-28 20:23 编辑

现有代码可以统计文件夹下所有类型,然而现在需要分别统计各个类型的总数量和总大小,求解。
  1. @echo off
  2. (for /r %%i in (*) do (
  3.    if not defined %%~xi set %%~xi=a&set /a n+=1&echo;%%~xi
  4. ))>d.txt
  5. >>d.txt echo 共有 %n% 种类型的文件
  6. start d.txt
复制代码

作者: Nsqs    时间: 2016-4-28 14:51

本帖最后由 Nsqs 于 2016-4-28 15:15 编辑
  1. @echo off
  2. (for /r %%i in (*) do (
  3.    if not defined %%~xi (
  4.    set %%~xi=a&set/a c+=1
  5.    for /r %%j in (*%%~xi)do (set/a n+=1)
  6.    call echo %%~xi :[%%n%%]
  7.    set n=0
  8.    )
  9. ))>d.txt
  10. >>d.txt echo 共有 %c% 种类型的文件
  11. start d.txt
复制代码

作者: flyinnet9    时间: 2016-4-28 16:12

  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for /r %%a in (*) do (
  4.   if not defined %%~xa (
  5.     set /a n+=1
  6.     set /a #%%~xa+=1
  7.     set %%~xa=1
  8.     set _%%~xa=%%~za
  9.   ) else (
  10.   set /a _%%~xa=!_%%~xa!+%%~za
  11.   set /a #%%~xa+=1
  12.   )
  13. )
  14. echo.共有 !n! 种文件,其中:
  15. for /f "tokens=1-2 delims=#=" %%a in ('set #') do set %%a=%%b
  16. for /f "tokens=1-2 delims=_=" %%a in ('set _') do echo.%%a 文件共有 !%%a! 个,共 %%b 字节
  17. pause
复制代码

作者: pcl_test    时间: 2016-4-29 00:27

本帖最后由 pcl_test 于 2016-4-29 21:20 编辑
  1. /*&cls
  2. @echo off
  3. (for /f "delims=" %%a in ('dir /a-d/b/s^^^|find /v "%~nx0"') do @echo;%%~nxa*%%~za)|cscript -nologo -e:jscript "%~f0"
  4. pause&exit
  5. */
  6. function FormatSize(val){
  7.     var s = '', val = Number(val);
  8.     if(val >= 1125899906842624)
  9.         s = parseInt((val/1125899906842624)*100)/100 +' PB';
  10.     else if(val >= 1099511627776)
  11.         s = parseInt((val/1099511627776)*100)/100 +' TB';
  12.     else if (val >= 1073741824)
  13.         s = parseInt((val/1073741824)*100)/100 +' GB';
  14.     else if (val >= 1048576)
  15.         s = parseInt((val/1048576)*100)/100 +' MB';
  16.     else if (val >= 1024)
  17.         s = parseInt((val/1024)*100)/100 +' KB';
  18.     else s = val+' 字节';
  19.     return s;
  20. }
  21. var files = WSH.StdIn.ReadAll().split(/\r\n/);
  22. var count = {}, size = {};
  23. for(var i = 0; i<files.length; i++){
  24.     var f = files[i].split('*');
  25.     var ext = /\./.test(f[0])?f[0].replace(/.+(\.[^\.]+)/, '$1'):f[0];
  26.     var ext = ext.toLowerCase();
  27.     count[ext]?count[ext]++:count[ext]=1;
  28.     size[ext]?size[ext]+=Number(f[1]):size[ext]=Number(f[1]);
  29. }
  30. var n = m = sum =0, txt = '';
  31. for (var e in count){
  32.     /\./.test(e)?n++:m++;
  33.     sum+=size[e];
  34.     txt +=e +'\t'+ count[e] +'\t'+ FormatSize(size[e]) +'\r\n';
  35. }
  36. var txt = txt+ '共' +n+ '种类型,';
  37. if(m>0)txt += m +'个无扩展名的文件,';
  38. WSH.echo(txt +'总大小'+ FormatSize(sum));
复制代码





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