![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 01:26 |
共 48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 求助~! |
| 可打印版本 1,169 / 11 |
| 第1楼 iaide007 | 发表于 2006-09-09 10:07 |
| 初级用户 发帖 12 积分 36 | |
|
求助~! 如何判断一个文件夹大于500M 就清空?
什么写。请高手赐招。:P |
|
| 第2楼 NaturalJ0 | 发表于 2006-09-10 00:02 |
| 银牌会员 发帖 533 积分 1,181 | |
|
dir/a/s 应该能查出总量,比如这样的。
所列文件总数: 4883 个文件 1,155,276,674 字节 746 个目录 3,041,497,088 可用字节 有数量后应该可以做了吧。 |
|
| 第3楼 namejm | 发表于 2006-09-10 01:57 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
NaturalJ0提到了思路,那我就来一段代码吧。
要注意的是,因为CMD进行运算有取值范围的限制,所以对取到的字节数的最后三位作了抛弃处理,得到的结果是个近似值,一般是取到的字节数越大,误差越小,500M左右的文件夹,其误差可以忽略不计: [ Last edited by namejm on 2006-9-10 at 01:59 ] |
|
| 第4楼 3742668 | 发表于 2006-09-10 23:19 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
Re namejm:
个人认为不必把size单位转换为MB,直接把500MB转换为字节比较似乎可以简略点,因为用if … GTR … 结构不存在set /a的限制。 另: 我们几个版主失职,亏得有你们这么多热心朋友支持这个版块,没啥说的,个人给你加上个20分表示感谢。 |
|
| 第5楼 namejm | 发表于 2006-09-11 06:18 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
Re 3742668:
首先对你给我加20分表示感谢。 从回复这么多帖子的过程中,我不仅练了手脚,也学到了很多东西。能用批处理帮别人解决一些工作上的问题,让我感到很高兴。我感觉这是一个回帖→解决别人问题→提高自己写代码的水平→回更具有挑战性的帖→用更简洁更多样化的方法解决别人的问题→……这样一个不断提高的过程,我想很多人都会乐在其中的。 看到你说可以不用转换为MB,因为用if … GTR … 结构不存在set /a的限制这句话,我感觉这样处理对以后写代码非常具有实用价值。为了稳妥起见,我测试了一些数据,却在无意中发现CMD在进行数据的比较的时候,还是会受到字节长短的限制,似乎数字位数超过10就会出错。比如在下的两段代码中,执行第一段会显示yes,执行第二段会显示no。 1、 2、 |
|
| 第6楼 zh159 | 发表于 2006-09-11 06:51 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
修改一下namejm的:
set size=%%i 只取“dir /s”最后所列文件总数的总字节 |
|
| 第7楼 namejm | 发表于 2006-09-11 07:29 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
嘿嘿,zxcv的代码充分利用了for的特性,应该是最简洁的了。
只是字节数换算成MB的时候,不能直接除以1048576,这个地方应该引起重视,因为如果字节数太大的话,很可能就超出了CMD处理的范围。 |
|
| 第8楼 zh159 | 发表于 2006-09-11 08:37 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
嘿嘿,我试了2095748268字节(1998M)都没问题,所以才确定这样处理
![]() 补充: 测试出“set /a size=”数字变量计算最大为 2147483647(2048M)(2的31次方-1) “set /a size=”的除数 /n 最大也为 2147483647(2048M)(2的31次方-1) 以上XP SP1通过 [ Last edited by zxcv on 2006-9-11 at 11:26 ] |
|
| 第9楼 namejm | 发表于 2006-09-11 08:59 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
呵呵,1998M没问题,并不代表都没问题啊,你看看我在5楼的测试就知道了。
其实,set使用双字节存储整数,有32位的存贮范围限制(引willsort语),如果数字不在2^-31~2^31-1这个范围,CMD就不能正确地对它进行运算了。 类似的帖子有:如何显示磁盘的剩余空间? |
|
| 第10楼 zh159 | 发表于 2006-09-11 09:05 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
确实如此
不过对于楼主,估计基本够用了 不行的将“set /a size=%size%/1048576”改为“set /a size=%size:~0,-3%/1049”就行了 更正一下: “set size=”应该不受限,“set /a size=”受2^32-1限制,2^31~2^32-1之间得出“set /a size=%size%”为%size%-4294967296的负数 [ Last edited by zxcv on 2006-9-11 at 11:28 ] |
|
| 第11楼 namejm | 发表于 2006-09-11 09:35 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by zxcv at 2006-9-11 09:05: 所以要对后三位数字作抛弃处理。 现在我发现我那段代码也有问题,除2之前就应该对数字做处理的。还是用你的代码比较好一点,不过要直接抛弃后三位。 [ Last edited by namejm on 2006-9-12 at 00:29 ] |
|
| 第12楼 piziliu2004 | 发表于 2006-09-13 02:03 |
| 中级用户 发帖 139 积分 321 | |
|
刚做了个vbs的给大家分享.........
Function ShowFolderSize(filespec) Dim fso, f, s Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(filespec) s = UCase(f.Name) &" uses " & FormatNumber(f.size/(1024*1024),2) & " MB." wscript.echo s If FormatNumber(f.size/(1024*1024),2)>=500.00 then wscript.echo "the file is over size" fso.DeleteFolder(filespec) End If End Function |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |