中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-24 14:21
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何显示磁盘的剩余空间? 精华I 查看 19,792 回复 46
16 发表于 2006-04-14 13:02 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
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 发表于 2006-04-14 17:15 ·  中国 福建 三明 电信
中级用户
★★
积分 316
发帖 83
注册 2005-03-01 00:00
21年会员
UID 36626
性别 男
状态 离线
for /f "tokens=3" %%a in ('"dir /-c c:\ | find "可用字节""') do set freesize=%%a



这个 方法很好啊
18 发表于 2006-04-15 21:41 ·  中国 重庆 沙坪坝区 联通
高级用户
★★
积分 772
发帖 273
注册 2004-10-23 00:00
21年会员
UID 32861
性别 男
状态 离线
直接调用VBS应该简单的多
http://www.msfans.net/bbs/
19 发表于 2006-04-17 01:00 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
其实应该是bat比vbs简单得多。
20 发表于 2006-04-17 18:17 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
Originally posted by 3742668 at 2006-4-17 01:00:
其实应该是bat比vbs简单得多。

那如果想查询所有存在的磁盘分区的剩余空间大小,要求用MB为单位,不借助第三方软件,该如何写代码呢?
在2000下能实现这个功能吗?
21 发表于 2006-04-21 19:43 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
在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 发表于 2006-04-21 22:44 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
估计是因为你没有启用延迟环境变量的缘故,导致freesize的值以为未变。建议用SETLOCAL ENABLEDELAYEDEXPANSION来启用延迟环境变量,另外需用!freesize!来替代%freesize%。不过既然是XP,何必考虑一个命令搞定呢?

@echo off
for /f "tokens=1,2" %%i in ('"wmic logicaldisk get freespace,caption"') do set %%i=%%j
echo C盘剩余空间为: %c:% 字节
echo D盘剩余空间为: %d:% 字节
echo E盘剩余空间为: %e:% 字节
pause
23 发表于 2006-04-22 13:03 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
Originally posted by 3742668 at 2006-4-21 22:44:
估计是因为你没有启用延迟环境变量的缘故,导致freesize的值以为未变。建议用SETLOCAL ENABLEDELAYEDEXPANSION来启用延迟环境变量,另外需用!freesize!来替代% ...

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

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
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
)
)
pause

如果想得到精确的以mb为单位的空间数也不是没有办法,只要把除法改成减法自己写代码分两部分算就行了,当然,没什么实用性。
其实利用wmic可以保存各个盘的剩余空间数,然后自己再通过运算来获得mb数应该简单一些。
25 发表于 2006-04-22 13:44 ·  中国 福建 泉州 电信
高级用户
★★
论坛灌水专业户
积分 613
发帖 266
注册 2006-04-19 22:47
20年会员
UID 54113
来自 河南省
状态 离线
看不太懂~~~~~~~~~~
26 发表于 2006-04-22 17:16 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
to 3742668:
感谢你的耐心回答,解决了一个困扰我很久的难题,再次感谢.

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

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

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

[ Last edited by namejm on 2006-4-22 at 17:42 ]
27 发表于 2006-04-22 18:40 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
1.算起来比较麻烦,把思路说一下你自己尝试了看吧:
其实就是按照手算除法一样,不过分成两部分,先用前7位与1048576计算,然后把减剩下的加前7位以外的组合了再与1048576计算,最后把两部分的结果合并起来就行了。
2,之所以说没有什么实用性,因为考虑到执行速度以及繁琐程度,不如改用其它的方法。
3,我想你没有仔细去看那个wmic结果的批处理,你仔细再看看结果是保存在变量中还是保存在文件中。。
28 发表于 2006-04-22 22:34 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
Originally posted by 3742668 at 2006-4-22 18:40:
3,我想你没有仔细去看那个wmic结果的批处理,你仔细再看看结果是保存在变量中还是保存在文件中。。

呵呵,不是我没看,是我对wmic很陌生,看不懂:(
还是谢谢你的解答.
29 发表于 2006-04-22 22:47 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
在2000系统环境中,for /f "tokens=3" %%b in ('dir /-c %%a:\^|find "可用字节"') do set freesize=%%b这句始终不能得到正确结果,请问该如何修改代码?
30 发表于 2006-06-11 18:29 ·  中国 四川 成都 鹏博士宽带
荣誉版主
★★★★
batch fan
积分 5,226
发帖 1,737
注册 2006-03-10 00:38
20年会员
UID 51697
来自 成都
状态 离线
  29楼的问题有人解答吗?很想知道该怎么处理。
论坛跳转: