找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 97560|回复: 18

[文件操作] 求批处理统计文件夹内的所有文件的数量和总大小(精确到M)

[复制链接]
发表于 2015-11-5 00:17:55 | 显示全部楼层 |阅读模式
求统计文件夹内的所有文件的数量和总大小(精确到M) 写到新生成的一个txt汇总文件

例如  文件夹A1里有 12个文件(不管什么类型的文件 全部统计)21M
        文件夹B2里有 24个文件 33M
        文件夹C3里有 39个文件 43M
        文件夹D4里有 54个文件103M  ………………

经过批处理后 写入到一个txt文本里 ——(以下为文本统计格式内容)
A1 12个21M
B2 24个33M
C3 39个43M
D4 54个103M  ………………
 楼主| 发表于 2015-11-5 09:58:05 | 显示全部楼层
跪求大神支招 继续在线等
发表于 2015-11-5 10:00:28 | 显示全部楼层
有时间等没时间自己学么。
 楼主| 发表于 2015-11-5 10:45:49 | 显示全部楼层
我又不是学电脑的 我只是个律师而已 一点基础都没有的 只是来寻求帮助
 楼主| 发表于 2015-11-5 10:46:22 | 显示全部楼层
回复 3# 依山居


    我又不是学电脑的 我只是个律师而已 一点基础都没有的 只是来寻求帮助
发表于 2015-11-5 11:02:58 | 显示全部楼层
回复 5# crownking1983


    别找借口了。即使是程序员里也有有很大比例不是学计算机出身了。
发表于 2015-11-5 11:24:32 | 显示全部楼层
  1. for /f "tokens=1,2,3,4" %%i in ('dir %1^|findstr /c:"个文件"') do (echo %1 %%i%%j %%k%%l)
复制代码

评分

参与人数 1技术 +1 收起 理由
依山居 + 1 1

查看全部评分

发表于 2015-11-5 12:10:00 | 显示全部楼层
  1. @if(0)==(0) echo off
  2. set "ph=C:\TEST"
  3. if exist "%ph%" CScript -NoLogo -E:JScript %0 "%ph%" >new_files.txt
  4. pause & exit
  5. @end
  6. var m=1048576,fso=new ActiveXObject("Scripting.FileSystemObject");
  7. var Folder=fso.GetFolder(WSH.Arguments.Count()?WSH.Arguments.Item(0):".");

  8. function folders (F, num){
  9.   for(var e=new Enumerator(F.Files);!e.atEnd();e.moveNext()){
  10.      num++;
  11.   }
  12.   return num;
  13. }

  14. for(var e=new Enumerator(Folder.SubFolders);!e.atEnd();e.moveNext()){
  15.    var F = e.item();
  16.    var n = folders(fso.GetFolder(F.Path),0);
  17.    WSH.Echo(F.Name,"\t", n, "个文件\t", (F.size/m).toFixed(2));
  18. }
复制代码

评分

参与人数 1技术 +1 收起 理由
依山居 + 1 1

查看全部评分

发表于 2015-11-5 13:50:33 | 显示全部楼层
哈哈,Demon 也是律师
别人我不太清楚,不过管理层大半都不是学电脑的

不过这个需求确实不指望新手自己捯饬捯饬就能解决
发表于 2015-11-6 04:25:20 | 显示全部楼层
回复 9# CrLf


    论坛里的伸手党都同一群人。= =看到直接问让写好完整代码的都想吐槽。
发表于 2015-11-6 23:30:15 | 显示全部楼层
本帖最后由 WHY 于 2015-11-7 09:40 编辑
  1. @if (0)==(0) echo off
  2. pushd D:\TEST\
  3. (for /d  %%i in (*) do (
  4.     set /p "=%%i "
  5.     dir /s /-c /a "%%i" | cscript //nologo //e:jscript "%~0"
  6. ))<nul
  7. pause & exit
  8. @end

  9. var re = /(所列文件总数|Total Files Listed):\r\n\s+(\d+).*?(\d+)/;
  10. var ar = WSH.StdIn.ReadAll().match(re);
  11. WSH.Echo(ar[2] + '个 ' + Math.round(ar[3]*100/1048576)/100 + 'MB')
复制代码
空目录的话, dir /s /-c /a-d 就挂了~

评分

参与人数 1技术 +1 收起 理由
依山居 + 1 1

查看全部评分

 楼主| 发表于 2015-11-21 23:42:47 | 显示全部楼层

求改良BAT(统计文件夹内的所有文件的数量和总大小)

求高手修改改良我写的这段BAT命令 (统计文件夹内的所有文件的数量和总大小 然后汇总到一个新txt文本里)
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /d %%a in (*) do (
  4.     set/a n=z=0
  5.     pushd "%%a"
  6.     for %%b in (*.*.) do (
  7.         set/a n+=1,z+=%%~zb
  8.     )
  9.     set/a "z>>=20"
  10.     popd
  11.     echo;%%a [!n!个!z!M]
  12. ))>统计结果.txt
  13. pause
复制代码
以上是我哥们写的,但是处理时遇到一个问题,就是执行该命令后只能统计文件夹内的第一层目录的文件情况,但是里面的子文件夹不能一并统计。我哥们现在去外地了
求高手帮个忙修改一下这个bat命令,实现执行后统计文件夹内包含所有文件及所有子文件夹下的文件,以及子文件夹下的子文件夹下的文件,以及子文件夹下的子文件夹下的子文件夹下的文件…………
发表于 2015-11-22 17:15:07 | 显示全部楼层
本帖最后由 慕夜蓝化 于 2015-11-22 18:16 编辑

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f “delims=” %%i in ('dir /s/b/l/ad') do (
  4. cd "%%~fsi"
  5. set/a a=0,n=0
  6. for /f "delims=" %%a in ('dir /b/l/aa') do (
  7. set/a a+=1,n+=%%~za 2>nul
  8. )
  9. set/a n/=1048576
  10. echo.%%~fi : !a! : !n!MB
  11. )) >统计结果.txt
  12. pause
复制代码
MB不支持小数位,文件过小会显示为零,可以删除

  1. set/a n/=1048576
复制代码
并删除MB改为字节。

或者使用KB,修改为

  1. set/a n/=1024
  2. echo.%%~fi : !a! : !n!KB
复制代码
发表于 2015-11-22 18:24:37 | 显示全部楼层

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /s/b/l/ad') do (
  4. set/a n=0,r=0
  5. cd "%%~fsi"
  6. for /f "tokens=3" %%a in ('dir /aa') do (
  7. set n=!a!
  8. set a=%%a
  9. set/a r+=1
  10. )
  11. echo.%%i:文件数量:!r! 总大小:!n!
  12. )
  13. pause
复制代码
钻了空子。
发表于 2015-11-22 22:01:09 | 显示全部楼层
本帖最后由 wankoilz 于 2015-11-22 22:03 编辑

用纯批处理在数字计算上受限制,这个问题用批处理结合awk倒是简单:
需拖拽执行
  1. # & cls & (for /f "delims=" %%a in ('dir/a-d/b/s %1') do @echo %%~za) | gawk -v path=%~n1 -f %0 >con & pause & exit
  2. {sum+=$0}
  3. END{
  4.         printf "%s文件夹总大小为: \n%.2f byte\n%.2f MB\n%.2f GB\n",path,sum,sum/1024/1024,sum/1024/1024/1024
  5. }
复制代码
gawk 4.1.0 下载地址:http://www.bathome.net/viewthread.php?tid=21366&highlight=gawk

评分

参与人数 1技术 +1 收起 理由
依山居 + 1 1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 07:21 , Processed in 0.021498 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表