中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何检测文件夹的大小?
« [1] [2] »
作者:
标题: [已结]如何检测文件夹的大小? 上一主题 | 下一主题
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『楼 主』:  [已结]如何检测文件夹的大小?

  用for语句中的%~zi只能检测到文件的大小,检测文件夹时一律显示为0。
  现在想达到以下目的:不产生临时文件,仅用CMD命令,如何检测文件夹的大小?要求适用于XP和2K环境。

[ Last edited by willsort on 2006-6-14 at 17:23 ]

2006-6-11 18:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 2 楼』:  

dir DstDir /a/s/w | find "个文件"

最后一行中有需要的内容。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2006-6-11 18:48
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 3 楼』:  

  最后一行该怎么提取呢?能不能给个XP和2K下都适用的方案啊?

2006-6-11 19:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 4 楼』:  

按说你也算是批处理的老手了,提取最后一行的内容是你自己应该可以解决的问题。

有什么问题,自己多动手试一试,或者查一下老帖子,一问再问对提高你自己的水平毫无长进。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2006-6-11 20:50
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 5 楼』:  

有一点需注意:如果目录下包含目录的话是不会把子目录的空间加上去的。
    如果需要计算包括子目录的大小的话,建议还是用dir /a/s | find /v配合for来自己加吧。

2006-6-11 21:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 6 楼』:  

  呵呵,Climbing说的是。
  参考了以前的帖子,得到如下代码[1],但是只适用于XP,2K下会出错。以前在虚拟机中测试过的,好象是find这条命令用在这条语句中会有问题,至于具体怎么回事,因为虚拟机已经被我卸了,2K的系统盘也找不着,我现在也闹不清了。
  顺便再提个相关的问题:如果要提取的不是最后一行,而是倒数的第N行,又该如何实现?(我水平还很差,提的问题比较菜鸟一点,各位帮帮忙吧。)
[1]:
@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 ]

2006-6-11 21:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 7 楼』:  

如果允许使用第三方工具的话,可以用DU之类的工具直接做到的。



Wengier - 新DOS时代

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

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

2006-6-12 00:24
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 8 楼』:  

@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%"



注意要查找的文件中必须没有空行,如果有空行就没有作用了

2006-6-12 13:27
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 9 楼』:  

  当i为10以内的数的时候,bagpipe的方法很管用。但是,超过9之后就有问题了。正在测试,看能不能找到更好的办法。

2006-6-12 14:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 10 楼』:  

可以有更好的办法,不过我上面已经说了,如果文件中存在空行判断就不准了,你查看一下文件中是不是有空行啊?我测试的时候10行以外的我也测试了,不过那段代码只是粗略的写了一下,跟本就不完善,例如如果文件没有倒数第几行怎么办之类的,呵呵,你在完善一下吧,OK?

我流.......泪而走

2006-6-12 15:56
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 11 楼』:  

  老大,什么叫流泪而走啊?难道这两天北京又起沙尘暴了?
  这两天昏头昏脑的,做事老走神,有点力不从心了。我再看看吧。

2006-6-12 16:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 12 楼』:  

几日不见,bagpipe的手段高明了不少哦。尤其最后一句用findstr来显示结果而不用for甚合我意,不过也正是这句上有点小毛病,当内容中包含行号时可能会出现错误,而且出现错误的可能性还是比较大的,所以建议把最后一句改为:
findstr /n . 要搜索的文件.bat | findstr /b %r%: || echo 空白行


2006-6-12 17:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bagpipe
银牌会员

DOS联盟捡破烂的


积分 1144
发帖 425
注册 2005-10-20
来自 北京
状态 离线
『第 13 楼』:  

呵呵,偶可不高明,高明的人是你,又学到了,空白行是怎么过滤掉的,呵呵,还为这个空白行发愁呢......

2006-6-12 17:57
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 14 楼』:  

Re 3742668『第 5 楼』:

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

Re namejm『第 6 楼』:

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

Re bagpipe『第 13 楼』:

      空行没有字符,而.表示匹配任意一个字符,所以被过滤了。后面加一个表示任意多个的*就可以了。可惜不支持表示一个或更多个的字符的+,如果要过滤空行的话,只能以..*来代替。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-12 18:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by willsort at 2006-6-12 18:24:
Re namejm『第 6 楼』:

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

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

2006-6-12 20:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: