中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-25 22:16
47,812 主题排行 / 349,910 发帖 / 今日 0 篇 / 48,264 会员排行
DOS批处理 & 脚本技术(批处理室) » [已结]如何显示磁盘的剩余空间?
可打印版本  20,763 / 46
第1楼 namejm 发表于 2006-03-26 00:19
荣誉版主 发帖 1,737 积分 5,226 来自 成都
[已结]如何显示磁盘的剩余空间?
操作系统为WinXP,想不借助第三方软件实现显示磁盘剩余空间的功能,潜水了好几天,写了如下代码,请大家帮帮我.
@echo off
rem 存在问题
rem
rem 1、怎样把字节数转换为以M为单位的数?
rem
rem 2、怎样才能不产生临时文件?
color 1f
title 显示C盘剩余空间
del size.txt>nul 2>nul
dir /-c c:\|find "可用字节">size.txt
for /f "tokens=3" %%a in (size.txt) do echo C盘还有 %%a 字节剩余空间
del size.txt>nul 2>nul
echo.
echo.
echo.
echo 按任意键退出
pause>nul

  目前已经找到了完美的解决方案,请看代码:

  出处:求所有分区剩余空间的精确值(以MB为单位)

[ Last edited by namejm on 2007-3-11 at 02:26 PM ]
第2楼 Climbing 发表于 2006-03-26 01:08
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
用:

set /a freesize=%%a/1048576

来计算MB,freesize成保存的就是MB为单位的数字了。

不产生临时文件的方法可能有点不雅观,试试这样:
for /f "tokens=3" %%a in ('dir /-c c:\') do set /a freesize=%%a/1048576

由于你需要的行在最后一行,虽然这样显得有点啰索,但确实能够满足需要。
第3楼 3742668 发表于 2006-03-26 12:06
荣誉版主 发帖 718 积分 2,013
@echo off
echo 盘符 剩余空间 分区大小
wmic logicaldisk where caption="c:" get size,freespace,caption | findstr /v /i "caption"
pause>nul
第4楼 Climbing 发表于 2006-03-26 14:27
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
wmic是什么东东?
第5楼 namejm 发表于 2006-03-26 15:56
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Originally posted by Climbing at 2006-3-26 01:08:
用:

set /a freesize=%%a/1048576

来计算MB,freesize成保存的就是MB为单位的数字了。

不产生临时文件的方法可能有点不雅观,试试这样:
for /f "to ...



试了一下,提示说找不到操作数,不知何故.
第6楼 willsort 发表于 2006-03-26 20:12
元老会员 发帖 1,512 积分 4,432
Re Climbing:


WMI 命令行WMI 命令行提供了到 Windows 管理规范 (WMI) 的简单命令行接口。WMIC 提供了到 WMI 的简单接口,这样即可利用 WMI 管理运行 Microsoft Windows 的计算机。WMIC 与现有命令行程序和实用程序命令相互操作,且很容易通过脚本或其它面向管理的应用程序来扩展 WMIC。

WMIC 允许以下操作:

通常使用使 WMI 更直观的“别名”,浏览 WMI 模式并查询它们的类和实例。
以单一命令方式使用本地计算机、远程计算机或多台计算机。
自定义别名并输出符合需要的格式。
创建和执行基于 WMIC 的脚本。

WMI 提供程序允许 WMI 管理大量的硬件组件、操作系统子系统和应用程序系统。WMIC 可与由这些 WMI 提供程序执行的所有模式一起使用。

可以在任何启用了 WMIC 的计算机上,使用 WMIC 远程管理任何具有 WMI 的计算机。对 WMIC 而言,不必为了管理远程管理的计算机而使其在该远程管理的计算机上可用。

方案
下列典型方案,使用 WMIC 使任务执行容易:
本地管理计算机—使用 WMIC 命令管理本地计算机。
远程管理计算机—使用 WMIC 管理其它计算机。
远程管理多台计算机—在一台计算机上通过 WMIC 使用单一命令管理多台计算机。
远程管理计算机(使用远程会话)—使用远程会话技术(如 Telnet 或终端服务)连接到远程计算机并使用 WMIC 对其进行管理。
使用管理脚本进行自动管理—使用 WMIC 编写简单的管理脚本,自动化管理计算机(本地、远程或多台计算机—顺序进行或同时进行)。
别名
通过称为“别名”的中间援助器使用 WMIC 时,可访问 WMI 结构。别名用来捕捉和一些特定的任务(比如磁盘或网络管理)相关联的 WMI 等级的特征。别名可用于为 WMI 类别、属性和方法提供更好的名称,或者以有用的输出格式排列属性。输出格式可以包括具体的属性值,或者以对某个具体表示法策略或功能适当的方式进行格式化。例如,别名可能具有“BRIEF”格式,此格式仅列出可通过别名来鉴定可视化对象的基本属性值。以 XML 格式检索管理数据,而且该数据通过内置或自定义 XSL 输出格式进行处理。

请参阅

WMI 概述
调用 WMIC
使用 WMIC
扩展别名
参考
用 WMIC 管理系统
Windows 管理规范命令行 (WMIC) 工具

以上引自XP帮助与支持中心文档
ms-its:C:\WINDOWS\Help\WMIC.chm::/WMIC_Overview.htm

Re namejm:

需要使用find过滤掉非文件大小的文本行

for /f "tokens=3" %%a in ('dir /-c c:\^|find "可用字节"') do set /a freesize=%%a/1048576
第7楼 Climbing 发表于 2006-03-26 20:34
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
嗯,受教了。
第8楼 namejm 发表于 2006-03-27 02:08
荣誉版主 发帖 1,737 积分 5,226 来自 成都
to willsort:
需要使用find过滤掉非文件大小的文本行

for /f "tokens=3" %%a in ('dir /-c c:\^|find "可用字节"') do set /a freesize=%%a/1048576

试运行了这段代码,用echo %freesize%来显示结果,结果居然显示负数,让人大跌眼镜.比如,我的C盘大小为2305712128字节,结果显示的是-1897.难道CMD神经错乱了不成?
第9楼 willsort 发表于 2006-03-27 09:14
元老会员 发帖 1,512 积分 4,432
Re namejm:

CMD没有神经错乱,是set处理的整数太大了,set使用双字节存储整数,有32位的存贮范围限制,也就是说它的处理范围是2^-31~2^31-1,你的磁盘空间超过了这个范围溢出了。

对此我没有太好的解决办法,只有舍弃后三位后除以1049的近似算法。

for /f "tokens=3" %%a in ('dir /-c c:\^|find "可用字节"') do set freesize=%%a
set /a freesize=%freesize:~0,-3%/1049>nul
echo Freesize:%freesize%
第10楼 namejm 发表于 2006-03-27 17:58
荣誉版主 发帖 1,737 积分 5,226 来自 成都
谢谢版主的详细解答.看来只能用个差不多的数字了.
第11楼 bagpipe 发表于 2006-03-29 11:12
银牌会员 发帖 425 积分 1,144 来自 北京
for /f "tokens=3" %%a in ('dir /-c c:\^|find "可用字节"') do set freesize=%%a这句我执行不了,不知道为什么加个^前导字符,请各位试验下,我的是2000,没有执行成功,所以改用其他方法得到结果.........
第12楼 3742668 发表于 2006-03-29 11:24
荣誉版主 发帖 718 积分 2,013
XP,SP2正常。
试试for /f "tokens=3" %%a in ('"dir /-c c:\ | find "可用字节""') do set freesize=%%a
用^来转义,否则执行的是 dir /-c c:\ find "可用字节"
第13楼 MIN 发表于 2006-03-29 11:41
初级用户 发帖 17 积分 58
DOS下能不能检测磁盘剩余空间呢?
第14楼 namejm 发表于 2006-04-13 23:01
荣誉版主 发帖 1,737 积分 5,226 来自 成都
如果想查询所有存在的磁盘分区的剩余空间大小,用下面的方法为什么得不到正确结果呢
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:\recycler\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
)

[ Last edited by namejm on 2006-4-14 at 12:59 ]
第15楼 DOSforever 发表于 2006-04-14 00:13
金牌会员 发帖 2,239 积分 4,639
Originally posted by MIN at 2006-3-29 11:41:
DOS下能不能检测磁盘剩余空间呢?

能。见:如何检测分区的剩余空间
1 2 3 4  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023