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

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

本帖最后由 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
复制代码

本帖最后由 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));
复制代码

TOP

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

TOP

本帖最后由 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
复制代码

TOP

返回列表