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

[系统相关] 如何利用批处理快速计算文件夹大小?

因为工作中需要计算许多数据的大小,而有一些文件夹比较大,比较繁琐。所以计算文件夹大小花费的时间会比较长。可不可以通过批处理解决这个问题?谢谢!

  1. du -hs "C:\Testfolder"
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2* delims= " %%a in ('dir/-c "C:\Testfolder"') do (
  3.    set var=!num!
  4.    set num=%%b
  5. )
  6. echo %var%
  7. pause
复制代码
技术问题请到论坛发帖求助!

TOP

  1. @echo off&chcp 437>nul&setlocal enabledelayedexpansion
  2. for /f "delims=" %%l in ('dir "C:\Testfolder" /a-d /s /-c ^| find /i "File"') do (
  3.   for /f "tokens=3 delims= " %%a in ("%%l") do (set size=%%a)
  4. )
  5. set /a "MBsize=(size+1048576/2)/1048576"
  6. echo !MBsize! MB (!size! bytes)
  7. pause
复制代码

TOP

回复 3楼 的帖子

我记得 如果目录是多层
dir  得到的是文件夹当前文件所占空间
dir /s 得到的才是整个文件夹所占的空间

并且在有些文件夹上面 点击属性,  所占空间在一直累加,而不是马上显示结果。
===========

=。= 果然被人抢了椅子。

TOP

多谢 If_Exist 的提醒,3楼的忘了子文件夹和隐藏,系统,只读文件了
:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=2* delims= " %%a in ('dir /s /ah /ar /aa /as /a /-c "C:\Testfolder"') do (
  3.    set var=!num!
  4.    set num=%%b
  5. )
  6. echo %var%
  7. pause
复制代码
技术问题请到论坛发帖求助!

TOP

回复 6楼 的帖子

测试于 WINXPSP3,
我觉得只用
  1. dir /s /a
复制代码
就不会漏掉 子文件夹, 隐藏,系统,只读文件了, 也就是说一个 /a 参数就可以 包含 DHSRA 各种属性了
  1. @echo off&chcp 437>nul&setlocal enabledelayedexpansion
  2. for /f "delims=" %%l in ('dir "C:\" /a /s /-c ^| findstr /i "bytes$"') do (
  3.   for /f "tokens=3 delims= " %%a in ("%%l") do (set size=%%a)
  4. )
  5. echo !size! bytes
  6. pause
复制代码

TOP

原帖由 neorobin 于 2010-6-18 22:34 发表
测试于 WINXPSP3,
我觉得只用dir /s /a就不会漏掉 子文件夹, 隐藏,系统,只读文件了, 也就是说一个 /a 参数就可以 包含 DHSRA 各种属性了@echo off&chcp 437>nul&setlocal enabledelayedexpansion
for /f "delims=" ...

真是可以,但我开始怎么测试都不行,真是晕了~~~
是我的cmd短路了还是我短路了 ^_^
技术问题请到论坛发帖求助!

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f  "delims=" %%a in ('dir /b /s /ad') do (
  3.      for /f "delims=" %%b in ('cd %%a ^|dir /s /b /a-d') do (
  4.              set /a m+=%%~zb
  5.      )
  6.      echo "%%a  !m!">>a.txt
  7.      set /a m=0
  8. )  
  9. endlocal
  10. pause
复制代码
我是想通过每个文件下文件大小累加来得到文件夹大小,但上面运行结果怎么实际属性中看到的大小不一样。
请问错在那里?

TOP

回复 9楼 的帖子

set /a 会受到最大数值的限制 2^32 次方
你的代码中未包括 含属性的文件,而实际大小应该是包含的
cd 应改为 cd/d  否则无法正确cd到所需目录
不过 'cd %%a ^|dir /s /b /a-d' 应该不行吧? 'cd %%a 到%%a目录,但无结果输出,又传递什么給dir呢?

技术问题请到论坛发帖求助!

TOP

回复 9楼 的帖子

可以去了解一下磁盘簇的概念和文件的存储方式。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

我碰到很多电脑上的wmi/wmic都有问题,那就用vbs吧
  1. f = "C:\Testfolder"
  2. set fso = CreateObject("Scripting.FileSystemObject")
  3. size = fso.GetFolder(f).Size
  4. WScript.Echo size
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

&setlocal enabledelayedexpansion


这句话什么意思啊?

TOP

回复 13楼 的帖子

参考教程:批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

谢谢
学习了....

TOP

返回列表