中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]如何显示磁盘的剩余空间?
« [1] [2] [3] [4] »
作者:
标题: [已结]如何显示磁盘的剩余空间? 上一主题 | 下一主题
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 31 楼』:  

Re namejm:

      可惜没有Win2000的环境,无法测试,对症的解法需要你详细说明错误信息。

      目前,我能想到的办法就是取消find,在CMD@WinXP下测试有效:
@echo off & setlocal EnableDelayedExpansion
for %%d 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 %%d:\nul (
        for /f "tokens=3" %%z in ('dir /-c %%d:\') do set freesize=%%z
        set /a freesize=!freesize:~0,-3!/1049>nul
        set freesize=         !freesize!
        set freesize=!freesize:~-9!
        echo %%d 盘剩余空间:!freesize! MB
    )
)
pause




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-11 18:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 32 楼』:  通过截取字符的方法排版出现错误

  通过截取字符最后几位的方法右对齐显示磁盘卷标名和剩余空间的时候,发生了如下的错误格式(当卷标名全为英文的时候能正确排版),请问是何原因?
  代码和图片如下
@echo off
cls
color 2e
title 各分区剩余空间情况
echo.
echo.
echo        ╔══════════════════════════════╗
echo        ║        磁盘分区         磁盘卷标名      剩余空间(MB)       ║
echo        ║    _____________________________________________________   ║
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 2>nul
      set freesize=       !freesize!
      set freesize=!freesize:~-7!
      for /f "tokens=4" %%c in ('vol %%a:')  do set volume=%%c
      set volume=                    !volume!
      set volume=!volume:~-20!
      echo        ║           %%a: !volume!        !freesize!           ║
    )
  )
)
echo        ╚══════════════════════════════╝
pause>nul
  

[ Last edited by willsort on 2006-6-12 at 19:31 ]

附件 1: error1.jpg (2006-6-11 20:08, 37.38 K, 下载附件所需积分 1 点 ,下载次数: 2)


2006-6-11 20:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 33 楼』:  

Re namejm:

      因为NT内部采用Unicode编码,而Unicode字符有一个特点——“不同显示宽度的英文和中文字符,有相同的字节长度和字符长度”。

      这个问题解决起来比较困难。替代的方案无非就是保证不出现中文(也即不显示卷标),或者依照我原来的建议不使用边框并将卷标列移到后方。



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-11 20:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 34 楼』:  

  真是鱼和熊掌不可兼得啊:(

2006-6-11 21:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 35 楼』:  

Re namejm:

      现在,想到一些方案来对齐汉字或其它多字节字符了。

      如果可以确保显示的变量串只有汉字,则补齐变量时可以用空白的汉字(比如全角状态下的空格)来代替普通的空格;

      否则,需要判断变量串的显示宽度,在缺省的中文环境下,可以理解为判断本地编码(ANSI)的变量串的字节长度,关于此点,现在的方案是生成临时文件(缺省采用ANSI编码),根据文件长度确定变量长度。代码如下[1]

      但是,它仍然无法对NTFS超长的卷标进行对齐。所以我仍然建议,不要强求去采用某些特殊的字符排列方式。可以代替的方案有很多,比如,卷标可以写在前面,而盘符将加上一对圆括弧紧跟在卷标后,如我的电脑中显示的那样。

     而在边框中显示变化字符串,将始终潜伏着边框不对齐的隐患,而且它也影响了代码本身的阅读性,而不使用边框用其它方法也可以取得良好的排版效果。

     另外,图片附件体积过大,只留一个就以示意;另外,CMD窗口的截图采用16的GIF体积会小很多,效果也不会太失真。

[1]DrvSpace.cmd
@echo off & setlocal EnableDelayedExpansion
color 2e
title 各分区剩余空间情况
echo.
echo.
echo        ╔══════════════════════════════╗
echo        ║        磁盘分区         磁盘卷标名      剩余空间(MB)       ║
echo        ║    _____________________________________________________   ║
for %%d 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 %%d:\nul (
        for /f "tokens=3" %%z in ('dir /-c %%d:\') do set freesize=%%z
        set /a freesize=!freesize:~0,-3!/1049>nul
        set freesize=         !freesize!
        set freesize=!freesize:~-9!
        for /f "tokens=3*" %%v in ('vol %%d:') do set volume=%%w
        echo.!volume!>_volume.tmp
        for %%f in (_volume.tmp) do for /l %%v in (%%~zf,1,20) do set volume= !volume!
echo        ║           %%d:   !volume!     !freesize!           ║
    )
)
echo        ╚══════════════════════════════╝
if exist _volume.tmp del _volume.tmp
pause
[ Last edited by willsort on 2006-6-12 at 19:34 ]



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-12 19:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 36 楼』:  

  感谢willsort,已经将代码稍加修改放进我的文件备份器脚本中去了。尽管还有潜在的风险,但是发出来之后,就会有更多的人来想办法,总比什么也不做强一点。

  刚发了几张图片,没注意到图片格式和颜色质量对图片大小的影响,以后我会注意发那些尽可能小而又比较清晰的图片上来。

2006-6-12 23:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 37 楼』:  


───────────────── 版务记录 ─────────────────
执行:Will Sort
操作:合并主题 {21183}通过截取字符的方法排版出现错误 -> 32~36 楼
说明:操作主题与本主题存在上下文的直接联系
───────────────── 版务记录 ─────────────────




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-6-14 16:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
mobo
初级用户





积分 73
发帖 30
注册 2006-9-18
状态 离线
『第 38 楼』:  查看logicaldisk[逻辑盘]摘要信息

::查看logicaldisk[逻辑盘]摘要信息.bat:
::---------BY MOBO in 2006-09-18
wmic logicaldisk list brief /format:hform >logicaldisk.htm

2006-9-19 08:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 39 楼』:  

寒~~现在动不动都WMIC的~~




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-9-19 08:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 40 楼』:  



  Quote:
Originally posted by electronixtar at 2006-9-19 08:56:
寒~~现在动不动都WMIC的~~

  呵呵,看来electronixtar对WMIC比较了解,想请教一下WMIC和CMD各有什么优劣。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-9-19 09:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 41 楼』:  

cmd亲近bat而wmic亲近wbem,没了~~

其实了解也不多~~听说过而已~~BagPipe是专家,不过又不发帖~~

其实Windows越来越有UNIX的味道了~~

[ Last edited by electronixtar on 2006-9-19 at 10:07 ]




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-9-19 10:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zouzhxi
中级用户

蝴蝶之吻


积分 430
发帖 177
注册 2006-9-20
来自 广东深圳
状态 离线
『第 42 楼』:  



  Quote:
Originally posted by willsort at 2006-6-11 18:54:
Re namejm:

      可惜没有Win2000的环境,无法测试,对症的解法需要你详细说明错误信息。

      目前,我能想到的办法就是取消find,在CMD@WinXP下测试栮..

如果是要显示硬盘总大小呢   怎么写....



Butterfly Kiss Blog
计算机DIY联盟论坛
2006-9-22 07:56
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (234693993)  编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 43 楼』:  

如果DOS支持浮点运算的话,那么获取磁盘空间还可以使用如下方法:
for /f "skip=4 tokens=4 delims=, " %%a in ('defrag c: -a') do (set /a freesize=%%a*1024)
pause
可惜的是提示错误,原因是不支持浮点运算。

2007-1-21 10:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 44 楼』:  

刚才研究了下,修改了上面的代码就可以实现变相的浮点预算了。
for /f "skip=4 tokens=4 delims=, " %%a in ('defrag d: -a') do echo %%a>ok.txt
for /f "tokens=1* delims=." %%a in (ok.txt) do set /a ok=%%a*1024+%%b*1024/100
echo %OK%
pause


2007-1-21 10:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HUNRYBECKY
银牌会员





积分 1179
发帖 442
注册 2006-9-9
状态 离线
『第 45 楼』:  

在修改下,发现FOR命令居然支持调用变量作为SET集,这下不用产生临时文件了。
@echo off
set /p mydisk=请你输入要查询的磁盘(如E:):
for /f "skip=4 tokens=4 delims=, " %%a in ('defrag %mydisk% -a') do set dftemp=%%a
for /f "tokens=1* delims=." %%a in ("%dftemp%") do set /a diskfree=%%a*1024+%%b*1024/100
echo %mydisk%的剩余空间为:%diskfree%MB
pause
不好意思,对FOR不是很熟悉,一直用不好

[ Last edited by HUNRYBECKY on 2007-1-21 at 11:06 AM ]

2007-1-21 10:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: