中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-14 20:56
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何检测文件夹的大小?
楼 主 [已结]如何检测文件夹的大小? 发表于 2006-06-11 18:41 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  用for语句中的%~zi只能检测到文件的大小,检测文件夹时一律显示为0。
  现在想达到以下目的:不产生临时文件,仅用CMD命令,如何检测文件夹的大小?要求适用于XP和2K环境。

[ Last edited by willsort on 2006-6-14 at 17:23 ]
2 发表于 2006-06-11 18:48 ·  中国 浙江 杭州 电信
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
dir DstDir /a/s/w | find "个文件"

最后一行中有需要的内容。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
3 发表于 2006-06-11 19:26 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  最后一行该怎么提取呢?能不能给个XP和2K下都适用的方案啊?
4 发表于 2006-06-11 20:50 ·  中国 河北 保定 移动
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
UID 1565
性别 男
来自 河北保定
状态 离线
按说你也算是批处理的老手了,提取最后一行的内容是你自己应该可以解决的问题。

有什么问题,自己多动手试一试,或者查一下老帖子,一问再问对提高你自己的水平毫无长进。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
5 发表于 2006-06-11 21:16 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
有一点需注意:如果目录下包含目录的话是不会把子目录的空间加上去的。
如果需要计算包括子目录的大小的话,建议还是用dir /a/s | find /v配合for来自己加吧。
6 发表于 2006-06-11 21:38 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  呵呵,Climbing说的是。
  参考了以前的帖子,得到如下代码,但是只适用于XP,2K下会出错。以前在虚拟机中测试过的,好象是find这条命令用在这条语句中会有问题,至于具体怎么回事,因为虚拟机已经被我卸了,2K的系统盘也找不着,我现在也闹不清了。
  顺便再提个相关的问题:如果要提取的不是最后一行,而是倒数的第N行,又该如何实现?(我水平还很差,提的问题比较菜鸟一点,各位帮帮忙吧。)
@echo off
cls
for /f "tokens=3" %%z in ('dir /a /s /-c d:\test^|find "个文件"') do set /a size=%%z
echo %size%
if %size% gtr 0 echo 大于0
pause


[ Last edited by namejm on 2006-6-11 at 21:44 ]
7 发表于 2006-06-12 00:24 ·  加拿大 Bell
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
如果允许使用第三方工具的话,可以用DU之类的工具直接做到的。
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

8 发表于 2006-06-12 13:27 ·  中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
UID 43784
来自 北京
状态 离线
@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 发表于 2006-06-12 14:05 ·  中国 浙江 杭州 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  当i为10以内的数的时候,bagpipe的方法很管用。但是,超过9之后就有问题了。正在测试,看能不能找到更好的办法。
10 发表于 2006-06-12 15:56 ·  中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
UID 43784
来自 北京
状态 离线
可以有更好的办法,不过我上面已经说了,如果文件中存在空行判断就不准了,你查看一下文件中是不是有空行啊?我测试的时候10行以外的我也测试了,不过那段代码只是粗略的写了一下,跟本就不完善,例如如果文件没有倒数第几行怎么办之类的,呵呵,你在完善一下吧,OK?

我流.......泪而走
11 发表于 2006-06-12 16:51 ·  中国 浙江 杭州 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
  老大,什么叫流泪而走啊?难道这两天北京又起沙尘暴了?
  这两天昏头昏脑的,做事老走神,有点力不从心了。我再看看吧。
12 发表于 2006-06-12 17:37 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
UID 50550
状态 离线
几日不见,bagpipe的手段高明了不少哦。尤其最后一句用findstr来显示结果而不用for甚合我意,不过也正是这句上有点小毛病,当内容中包含行号时可能会出现错误,而且出现错误的可能性还是比较大的,所以建议把最后一句改为:

findstr /n . 要搜索的文件.bat | findstr /b %r%: || echo 空白行
13 发表于 2006-06-12 17:57 ·  中国 北京 联通
银牌会员
★★★
DOS联盟捡破烂的
积分 1,144
发帖 425
注册 2005-10-20 00:00
UID 43784
来自 北京
状态 离线
呵呵,偶可不高明,高明的人是你,又学到了,空白行是怎么过滤掉的,呵呵,还为这个空白行发愁呢......
14 发表于 2006-06-12 18:24 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
UID 19
性别 男
状态 离线
Re 3742668『第 5 楼』:

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

Re namejm『第 6 楼』:

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

Re bagpipe『第 13 楼』:

空行没有字符,而.表示匹配任意一个字符,所以被过滤了。后面加一个表示任意多个的*就可以了。可惜不支持表示一个或更多个的字符的+,如果要过滤空行的话,只能以..*来代替。
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
15 发表于 2006-06-12 20:30 ·  中国 浙江 杭州 电信
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
UID 51697
来自 成都
状态 离线
Originally posted by willsort at 2006-6-12 18:24:
Re namejm『第 6 楼』:

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


  我是在虚拟机中测试的,可能是虚拟机的原因吧。等有机会我再找台2K的机子实地来测试一下。
  
  向版主的热心和勤劳致敬。
论坛跳转: