Board logo

标题: [已结]如何检测文件夹的大小? [打印本页]

作者: namejm     时间: 2006-6-11 18:41    标题: [已结]如何检测文件夹的大小?

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

[ Last edited by willsort on 2006-6-14 at 17:23 ]
作者: Climbing     时间: 2006-6-11 18:48
dir DstDir /a/s/w | find "个文件"

最后一行中有需要的内容。
作者: namejm     时间: 2006-6-11 19:26
  最后一行该怎么提取呢?能不能给个XP和2K下都适用的方案啊?
作者: Climbing     时间: 2006-6-11 20:50
按说你也算是批处理的老手了,提取最后一行的内容是你自己应该可以解决的问题。

有什么问题,自己多动手试一试,或者查一下老帖子,一问再问对提高你自己的水平毫无长进。
作者: 3742668     时间: 2006-6-11 21:16
有一点需注意:如果目录下包含目录的话是不会把子目录的空间加上去的。
    如果需要计算包括子目录的大小的话,建议还是用dir /a/s | find /v配合for来自己加吧。
作者: namejm     时间: 2006-6-11 21:38
  呵呵,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 ]
作者: Wengier     时间: 2006-6-12 00:24
如果允许使用第三方工具的话,可以用DU之类的工具直接做到的。
作者: bagpipe     时间: 2006-6-12 13:27
@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%"



注意要查找的文件中必须没有空行,如果有空行就没有作用了
作者: namejm     时间: 2006-6-12 14:05
  当i为10以内的数的时候,bagpipe的方法很管用。但是,超过9之后就有问题了。正在测试,看能不能找到更好的办法。
作者: bagpipe     时间: 2006-6-12 15:56
可以有更好的办法,不过我上面已经说了,如果文件中存在空行判断就不准了,你查看一下文件中是不是有空行啊?我测试的时候10行以外的我也测试了,不过那段代码只是粗略的写了一下,跟本就不完善,例如如果文件没有倒数第几行怎么办之类的,呵呵,你在完善一下吧,OK?

我流.......泪而走
作者: namejm     时间: 2006-6-12 16:51
  老大,什么叫流泪而走啊?难道这两天北京又起沙尘暴了?
  这两天昏头昏脑的,做事老走神,有点力不从心了。我再看看吧。
作者: 3742668     时间: 2006-6-12 17:37
几日不见,bagpipe的手段高明了不少哦。尤其最后一句用findstr来显示结果而不用for甚合我意,不过也正是这句上有点小毛病,当内容中包含行号时可能会出现错误,而且出现错误的可能性还是比较大的,所以建议把最后一句改为:
findstr /n . 要搜索的文件.bat | findstr /b %r%: || echo 空白行

作者: bagpipe     时间: 2006-6-12 17:57
呵呵,偶可不高明,高明的人是你,又学到了,空白行是怎么过滤掉的,呵呵,还为这个空白行发愁呢......
作者: willsort     时间: 2006-6-12 18:24
Re 3742668『第 5 楼』:

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

Re namejm『第 6 楼』:

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

Re bagpipe『第 13 楼』:

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


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

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

  我是在虚拟机中测试的,可能是虚拟机的原因吧。等有机会我再找台2K的机子实地来测试一下。
  
  向版主的热心和勤劳致敬。
作者: bagpipe     时间: 2006-6-12 20:44


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

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

Re namejm『第 6 楼』:

      昨天找了一台Win2000环堮..

对于查找英文字符WIN2000是没有不兼容问题的,而对于查找中文字符有时候会出现错误信息,我曾碰到过这样的不兼容问题,而对于'"    "'这样的形式不会出现,不过用'    ^|     ' 这样的形式有时候会出现报错的信息.......