中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-25 23:20
47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]如何显示磁盘的剩余空间?
可打印版本  20,773 / 46
第16楼 namejm 发表于 2006-04-14 13:02
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Originally posted by bagpipe at 2006-3-29 11:12:
for /f "tokens=3" %%a in ('dir /-c c:\^|find "可用字节"') do set freesize=%%a这句我执行不了,不知道为什么加个^前导字符,请各位试验下,我的是2000,没有执行成功,所以改用其他方法得到结果.........

能不能说一下你用什么方法实现的,我正好需要在2000下测试个批处理.谢谢.

[ Last edited by namejm on 2006-4-15 at 14:31 ]
第17楼 smileseeker 发表于 2006-04-14 17:15
中级用户 发帖 83 积分 316
for /f "tokens=3" %%a in ('"dir /-c c:\ | find "可用字节""') do set freesize=%%a



这个 方法很好啊
第18楼 chenhui530 发表于 2006-04-15 21:41
高级用户 发帖 273 积分 772
直接调用VBS应该简单的多
第19楼 3742668 发表于 2006-04-17 01:00
荣誉版主 发帖 718 积分 2,013
其实应该是bat比vbs简单得多。
第20楼 namejm 发表于 2006-04-17 18:17
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Originally posted by 3742668 at 2006-4-17 01:00:
其实应该是bat比vbs简单得多。

那如果想查询所有存在的磁盘分区的剩余空间大小,要求用MB为单位,不借助第三方软件,该如何写代码呢?
在2000下能实现这个功能吗?
第21楼 namejm 发表于 2006-04-21 19:43
荣誉版主 发帖 1,737 积分 5,226 来自 成都
在XP环境下,想查询每个分区的剩余空间,以MB为单位显示,以下代码为什么不能得出正确结果呢?
for %%a in (c d e f g h i j k l m n o p q r s t u v w x y z) do @(
if exist %%a:\nul (
for /f "tokens=3" %%b in ('dir /-c %%a:\^|find "可用字节"') do set freesize=%%b
set /a freesize=%freesize:~0,-3%/1049>nul
echo %% a 盘剩余空间:%freesize% MB
)
第22楼 3742668 发表于 2006-04-21 22:44
荣誉版主 发帖 718 积分 2,013
估计是因为你没有启用延迟环境变量的缘故,导致freesize的值以为未变。建议用SETLOCAL ENABLEDELAYEDEXPANSION来启用延迟环境变量,另外需用!freesize!来替代%freesize%。不过既然是XP,何必考虑一个命令搞定呢?
第23楼 namejm 发表于 2006-04-22 13:03
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Originally posted by 3742668 at 2006-4-21 22:44:
估计是因为你没有启用延迟环境变量的缘故,导致freesize的值以为未变。建议用SETLOCAL ENABLEDELAYEDEXPANSION来启用延迟环境变量,另外需用!freesize!来替代% ...

因为想显示所有存在的分区的剩余空间,并且要以MB为单位显示,所以要用到for语句,对SETLOCAL ENABLEDELAYEDEXPANSION的使用不是很了解,具体要修改什么地方,能不能在我贴出来的代码基础上进行修改呢?谢谢.
第24楼 3742668 发表于 2006-04-22 13:32
荣誉版主 发帖 718 积分 2,013
刚才看了一下,你的代码明显差个),所以首先应该在最后加个)
其次,echo %% a 中间多了个空格。
再次,算法有问题,结果可能出现错误。
最后,SETLOCAL ENABLEDELAYEDEXPANSION的用法:

如果想得到精确的以mb为单位的空间数也不是没有办法,只要把除法改成减法自己写代码分两部分算就行了,当然,没什么实用性。
其实利用wmic可以保存各个盘的剩余空间数,然后自己再通过运算来获得mb数应该简单一些。
第25楼 chineselgs 发表于 2006-04-22 13:44
高级用户 发帖 266 积分 613 来自 河南省
看不太懂~~~~~~~~~~
第26楼 namejm 发表于 2006-04-22 17:16
荣誉版主 发帖 1,737 积分 5,226 来自 成都
to 3742668:
感谢你的耐心回答,解决了一个困扰我很久的难题,再次感谢.

"如果想得到精确的以mb为单位的空间数也不是没有办法,只要把除法改成减法自己写代码分两部分算就行了"
----呵呵,想不到还有这样的写法,批处理真是太有趣了,能不能贴段代码出来开开眼界呢?

"当然,没什么实用性。"
----你是说分成两段代码的做法没实用性还是说以MB为单位显示没实用性呢?如果是后者的话,我可不太同意你的说法.

"其实利用wmic可以保存各个盘的剩余空间数,然后自己再通过运算来获得mb数应该简单一些。"
----这样做会产生临时文件吗?如果要产生临时文件的话,感觉还不是很完美.

[ Last edited by namejm on 2006-4-22 at 17:42 ]
第27楼 3742668 发表于 2006-04-22 18:40
荣誉版主 发帖 718 积分 2,013
1.算起来比较麻烦,把思路说一下你自己尝试了看吧:
其实就是按照手算除法一样,不过分成两部分,先用前7位与1048576计算,然后把减剩下的加前7位以外的组合了再与1048576计算,最后把两部分的结果合并起来就行了。
2,之所以说没有什么实用性,因为考虑到执行速度以及繁琐程度,不如改用其它的方法。
3,我想你没有仔细去看那个wmic结果的批处理,你仔细再看看结果是保存在变量中还是保存在文件中。。
第28楼 namejm 发表于 2006-04-22 22:34
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Originally posted by 3742668 at 2006-4-22 18:40:
3,我想你没有仔细去看那个wmic结果的批处理,你仔细再看看结果是保存在变量中还是保存在文件中。。

呵呵,不是我没看,是我对wmic很陌生,看不懂:(
还是谢谢你的解答.
第29楼 namejm 发表于 2006-04-22 22:47
荣誉版主 发帖 1,737 积分 5,226 来自 成都
在2000系统环境中,for /f "tokens=3" %%b in ('dir /-c %%a:\^|find "可用字节"') do set freesize=%%b这句始终不能得到正确结果,请问该如何修改代码?
第30楼 namejm 发表于 2006-06-11 18:29
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  29楼的问题有人解答吗?很想知道该怎么处理。
上一页  1 2 3 4  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023