标题: [系统相关] 如何利用批处理快速计算文件夹大小? [打印本页]
作者: whylve 时间: 2010-6-18 16:42 标题: 如何利用批处理快速计算文件夹大小?
因为工作中需要计算许多数据的大小,而有一些文件夹比较大,比较繁琐。所以计算文件夹大小花费的时间会比较长。可不可以通过批处理解决这个问题?谢谢!
作者: CUer 时间: 2010-6-18 17:55
复制代码
作者: 随风 时间: 2010-6-18 19:19
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=2* delims= " %%a in ('dir/-c "C:\Testfolder"') do (
- set var=!num!
- set num=%%b
- )
- echo %var%
- pause
复制代码
作者: neorobin 时间: 2010-6-18 20:45
- @echo off&chcp 437>nul&setlocal enabledelayedexpansion
- for /f "delims=" %%l in ('dir "C:\Testfolder" /a-d /s /-c ^| find /i "File"') do (
- for /f "tokens=3 delims= " %%a in ("%%l") do (set size=%%a)
- )
- set /a "MBsize=(size+1048576/2)/1048576"
- echo !MBsize! MB (!size! bytes)
- pause
复制代码
作者: 523066680 时间: 2010-6-18 20:48 标题: 回复 3楼 的帖子
我记得 如果目录是多层
dir 得到的是文件夹当前文件所占空间
dir /s 得到的才是整个文件夹所占的空间
并且在有些文件夹上面 点击属性, 所占空间在一直累加,而不是马上显示结果。
===========
=。= 果然被人抢了椅子。
作者: 随风 时间: 2010-6-18 21:20
多谢 If_Exist 的提醒,3楼的忘了子文件夹和隐藏,系统,只读文件了
:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=2* delims= " %%a in ('dir /s /ah /ar /aa /as /a /-c "C:\Testfolder"') do (
- set var=!num!
- set num=%%b
- )
- echo %var%
- pause
复制代码
作者: neorobin 时间: 2010-6-18 22:34 标题: 回复 6楼 的帖子
测试于 WINXPSP3,
我觉得只用复制代码
就不会漏掉 子文件夹, 隐藏,系统,只读文件了, 也就是说一个 /a 参数就可以 包含 DHSRA 各种属性了- @echo off&chcp 437>nul&setlocal enabledelayedexpansion
- for /f "delims=" %%l in ('dir "C:\" /a /s /-c ^| findstr /i "bytes$"') do (
- for /f "tokens=3 delims= " %%a in ("%%l") do (set size=%%a)
- )
- echo !size! bytes
- pause
复制代码
作者: 随风 时间: 2010-6-18 23:31
原帖由 neorobin 于 2010-6-18 22:34 发表
测试于 WINXPSP3,
我觉得只用dir /s /a就不会漏掉 子文件夹, 隐藏,系统,只读文件了, 也就是说一个 /a 参数就可以 包含 DHSRA 各种属性了@echo off&chcp 437>nul&setlocal enabledelayedexpansion
for /f "delims=" ...
真是可以,但我开始怎么测试都不行,真是晕了~~~
是我的cmd短路了还是我短路了 ^_^
作者: gxuan2008 时间: 2010-6-19 00:19
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /s /ad') do (
- for /f "delims=" %%b in ('cd %%a ^|dir /s /b /a-d') do (
- set /a m+=%%~zb
- )
- echo "%%a !m!">>a.txt
- set /a m=0
- )
- endlocal
- pause
复制代码
我是想通过每个文件下文件大小累加来得到文件夹大小,但上面运行结果怎么实际属性中看到的大小不一样。
请问错在那里?
作者: 随风 时间: 2010-6-19 01:13 标题: 回复 9楼 的帖子
set /a 会受到最大数值的限制 2^32 次方
你的代码中未包括 含属性的文件,而实际大小应该是包含的
cd 应改为 cd/d 否则无法正确cd到所需目录
不过 'cd %%a ^|dir /s /b /a-d' 应该不行吧? 'cd %%a 到%%a目录,但无结果输出,又传递什么給dir呢?
作者: zqz0012005 时间: 2010-6-19 01:21 标题: 回复 9楼 的帖子
可以去了解一下磁盘簇的概念和文件的存储方式。
作者: zqz0012005 时间: 2010-6-19 02:24
我碰到很多电脑上的wmi/wmic都有问题,那就用vbs吧- f = "C:\Testfolder"
- set fso = CreateObject("Scripting.FileSystemObject")
- size = fso.GetFolder(f).Size
- WScript.Echo size
复制代码
作者: whylve 时间: 2010-6-21 12:59
&setlocal enabledelayedexpansion
这句话什么意思啊?
作者: Batcher 时间: 2010-6-21 13:26 标题: 回复 13楼 的帖子
参考教程:批处理中的变量延迟扩展、变量嵌套
http://bbs.bathome.net/thread-2899-1-1.html
作者: whylve 时间: 2010-6-21 17:56
谢谢
学习了....
作者: shuaige100 时间: 2010-6-21 19:47 标题: 回复 12楼 的帖子
我觉得应该搞一个输入文件夹的路径就可以测算它的大小,再弄一个快捷键,太完美了
作者: Batcher 时间: 2010-6-21 20:34 标题: 回复 16楼 的帖子
推荐使用Total Commander:
选中一个文件夹,按空格键即可。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |