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

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

求统计文件夹内的所有文件的数量和总大小(精确到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  ………………

跪求大神支招 继续在线等

TOP

有时间等没时间自己学么。

TOP

我又不是学电脑的 我只是个律师而已 一点基础都没有的 只是来寻求帮助

TOP

回复 3# 依山居


    我又不是学电脑的 我只是个律师而已 一点基础都没有的 只是来寻求帮助

TOP

回复 5# crownking1983


    别找借口了。即使是程序员里也有有很大比例不是学计算机出身了。

TOP

  1. for /f "tokens=1,2,3,4" %%i in ('dir %1^|findstr /c:"个文件"') do (echo %1 %%i%%j %%k%%l)
复制代码
1

评分人数

TOP

  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

评分人数

TOP

哈哈,Demon 也是律师
别人我不太清楚,不过管理层大半都不是学电脑的

不过这个需求确实不指望新手自己捯饬捯饬就能解决

TOP

回复 9# CrLf


    论坛里的伸手党都同一群人。= =看到直接问让写好完整代码的都想吐槽。

TOP

本帖最后由 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

评分人数

TOP

求改良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命令,实现执行后统计文件夹内包含所有文件及所有子文件夹下的文件,以及子文件夹下的子文件夹下的文件,以及子文件夹下的子文件夹下的子文件夹下的文件…………

TOP

本帖最后由 慕夜蓝化 于 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
复制代码
踏实一些点.不要着急.你想要的时间都会给你.2

TOP

  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
复制代码
钻了空子。
踏实一些点.不要着急.你想要的时间都会给你.2

TOP

本帖最后由 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

评分人数

TOP

返回列表