中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 15:18
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]如何检测文件夹的大小?
可打印版本  5,123 / 15
第1楼 namejm 发表于 2006-06-11 18:41
荣誉版主 发帖 1,737 积分 5,226 来自 成都
[已结]如何检测文件夹的大小?
  用for语句中的%~zi只能检测到文件的大小,检测文件夹时一律显示为0。
  现在想达到以下目的:不产生临时文件,仅用CMD命令,如何检测文件夹的大小?要求适用于XP和2K环境。

[ Last edited by willsort on 2006-6-14 at 17:23 ]
第2楼 Climbing 发表于 2006-06-11 18:48
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
dir DstDir /a/s/w | find "个文件"

最后一行中有需要的内容。
第3楼 namejm 发表于 2006-06-11 19:26
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  最后一行该怎么提取呢?能不能给个XP和2K下都适用的方案啊?
第4楼 Climbing 发表于 2006-06-11 20:50
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
按说你也算是批处理的老手了,提取最后一行的内容是你自己应该可以解决的问题。

有什么问题,自己多动手试一试,或者查一下老帖子,一问再问对提高你自己的水平毫无长进。
第5楼 3742668 发表于 2006-06-11 21:16
荣誉版主 发帖 718 积分 2,013
有一点需注意:如果目录下包含目录的话是不会把子目录的空间加上去的。
如果需要计算包括子目录的大小的话,建议还是用dir /a/s | find /v配合for来自己加吧。
第6楼 namejm 发表于 2006-06-11 21:38
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  呵呵,Climbing说的是。
  参考了以前的帖子,得到如下代码,但是只适用于XP,2K下会出错。以前在虚拟机中测试过的,好象是find这条命令用在这条语句中会有问题,至于具体怎么回事,因为虚拟机已经被我卸了,2K的系统盘也找不着,我现在也闹不清了。
  顺便再提个相关的问题:如果要提取的不是最后一行,而是倒数的第N行,又该如何实现?(我水平还很差,提的问题比较菜鸟一点,各位帮帮忙吧。)


[ Last edited by namejm on 2006-6-11 at 21:44 ]
第7楼 Wengier 发表于 2006-06-12 00:24
系统支持 发帖 10,521 积分 27,736
如果允许使用第三方工具的话,可以用DU之类的工具直接做到的。
第8楼 bagpipe 发表于 2006-06-12 13:27
银牌会员 发帖 425 积分 1,144 来自 北京
@echo off
set /p i=输入倒数第几行行数:

for /f "tokens=1 delims=:" %%i in ('findstr /n . 要搜索的文件.bat') do set /a

u=%%i

set /a r=%u%-%i%+1

findstr /n . 要搜索的文件.bat|findstr "%r%"



注意要查找的文件中必须没有空行,如果有空行就没有作用了
第9楼 namejm 发表于 2006-06-12 14:05
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  当i为10以内的数的时候,bagpipe的方法很管用。但是,超过9之后就有问题了。正在测试,看能不能找到更好的办法。
第10楼 bagpipe 发表于 2006-06-12 15:56
银牌会员 发帖 425 积分 1,144 来自 北京
可以有更好的办法,不过我上面已经说了,如果文件中存在空行判断就不准了,你查看一下文件中是不是有空行啊?我测试的时候10行以外的我也测试了,不过那段代码只是粗略的写了一下,跟本就不完善,例如如果文件没有倒数第几行怎么办之类的,呵呵,你在完善一下吧,OK?

我流.......泪而走
第11楼 namejm 发表于 2006-06-12 16:51
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  老大,什么叫流泪而走啊?难道这两天北京又起沙尘暴了?
  这两天昏头昏脑的,做事老走神,有点力不从心了。我再看看吧。
第12楼 3742668 发表于 2006-06-12 17:37
荣誉版主 发帖 718 积分 2,013
几日不见,bagpipe的手段高明了不少哦。尤其最后一句用findstr来显示结果而不用for甚合我意,不过也正是这句上有点小毛病,当内容中包含行号时可能会出现错误,而且出现错误的可能性还是比较大的,所以建议把最后一句改为:
第13楼 bagpipe 发表于 2006-06-12 17:57
银牌会员 发帖 425 积分 1,144 来自 北京
呵呵,偶可不高明,高明的人是你,又学到了,空白行是怎么过滤掉的,呵呵,还为这个空白行发愁呢......
第14楼 willsort 发表于 2006-06-12 18:24
元老会员 发帖 1,512 积分 4,432
Re 3742668『第 5 楼』:

dir /a/s 最后列出的文件总数和总字节数,是包括嵌套的各级子目录的。

Re namejm『第 6 楼』:

昨天找了一台Win2000环境测试了,类似 ('dir ^| findstr "string"') 或者 ('"dir|findstr "string" "' ) 都得到了正常的结果。所以仍无法确定你所说的兼容性问题何在。

Re bagpipe『第 13 楼』:

空行没有字符,而.表示匹配任意一个字符,所以被过滤了。后面加一个表示任意多个的*就可以了。可惜不支持表示一个或更多个的字符的+,如果要过滤空行的话,只能以..*来代替。
第15楼 namejm 发表于 2006-06-12 20:30
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Originally posted by willsort at 2006-6-12 18:24:
Re namejm『第 6 楼』:

昨天找了一台Win2000环境测试了,类似 ('dir ^| findstr "string"') 或者 ('"dir|findstr "string" "' ) 都得到了正常的结果。所以仍无法确定你所说的兼容性问题何在。


  我是在虚拟机中测试的,可能是虚拟机的原因吧。等有机会我再找台2K的机子实地来测试一下。
  
  向版主的热心和勤劳致敬。
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023