无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 青青草
打印 上一主题 下一主题

批处理系列6:查找剩余空间最大的磁盘盘符(终稿)

    [复制链接]
1#
发表于 2021-7-13 21:19:36 | 显示全部楼层
本帖最后由 807979023 于 2021-7-13 21:34 编辑

转自批处理之家apang大师作品。
加了一句判断,多数代码看不懂,剩余空间的大小显示准确。

  1. @echo off&color 1f&echo.
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for /f "delims=g" %%a in ('cmd /u /c Echo,有') do set "Tab=%%a"
  4. set w=wmic logicaldisk where "DriveType='3'"
  5. set /a max=1
  6. for /f "tokens=1-3" %%a in ('%w% get freespace^,name^,size^|find ":"')do (
  7.   set /p=分区%%b%Tab%<nul
  8.   call :GetSize %%a000 free
  9.   call :GetSize %%c000 size
  10.   set /a used=size-free
  11.   if !size! gtr 102400 (
  12.     set "G=GB" & set /a size/=1024,used/=1024
  13.   ) else set "G=MB"
  14.   set /a used=1000*used/size
  15.   if "!used:~,-1!" == "" set "used=0!used!"
  16.   set /p=大小: !size:~,-2!.!size:~-2!!G!%Tab%<nul
  17.   set free1=!free!
  18.   if !free! gtr 102400 (set /a free/=1024 & set "G=GB") else set "G=MB"
  19.   set /p=剩余: !free:~,-2!.!free:~-2!!G!%Tab%<nul
  20.   set /p=使用率: !used:~,-1!.!used:~-1!%%<nul & echo,
  21.   if !free1! gtr !max! set max=!free1!&&set mb=!free:~,-2!.!free:~-2!!G!&&set bc=%%b
  22. )
  23. echo.&echo 硬盘剩余最大: 分区%bc%    剩余: %mb%
  24. echo.&echo 按任意键退出...&pause >nul&exit

  25. :GetSize
  26. set "num=%1" & set "n=" & set "%2="
  27. for %%a in (16 8 4 2 1) do (
  28.   if not "!num:~%%a!"=="" set /a n+=%%a & set "num=!num:~%%a!"
  29. )
  30. set "num=%1" & set /a n-=6
  31. for /l %%a in (!n! -1 1) do (
  32.   set "s=!num:~,-%%a!"
  33.   if "!s:~,1!" == "0" set "s=!s:~1!"
  34.   set /a m=s%%1048576,s/=1048576
  35.   set "%2=!%2!!s!"
  36.   set "num=!m!!num:~-%%a!"
  37. )
  38. if not defined %2 (
  39.   set "%2=!num:~,-1!"
  40. ) else if "!%2:~,1!" == "0" set "%2=!%2:~1!"
  41. goto :EOF
复制代码


1.jpg (60.51 KB, 下载次数: 102)

1.jpg

点评

于 Windows 7 X64 测试通过. [attachimg]483357[/attachimg]  详情 回复 发表于 2021-7-13 23:03
回复

使用道具 举报

2#
发表于 2021-7-14 10:06:48 | 显示全部楼层
plusv 发表于 2021-7-13 23:03
于 Windows 7 X64 测试通过.

请问格式和卷名是怎么加的呀!

点评

将 FileSystem,VolumeName 加到 For  详情 回复 发表于 2021-7-14 20:55
回复

使用道具 举报

3#
发表于 2021-7-14 10:07:00 | 显示全部楼层
本帖最后由 807979023 于 2021-7-14 10:08 编辑
plusv 发表于 2021-7-13 23:03
于 Windows 7 X64 测试通过.

回复

使用道具 举报

4#
发表于 2021-7-15 13:30:40 | 显示全部楼层
加格式和卷名后,xp  win7x32  win7x64 测试通过,win10x64失败。

点评

807979023> 加格式和卷名后,xp win7x32 win7x64 测试通过,win10x64失败。 我于 Windows XP/Windows 7 X64/Windows 10 X64 都没问题. ================================================= 另外: 我于 W  详情 回复 发表于 2021-7-15 18:28
回复

使用道具 举报

5#
发表于 2021-7-15 19:27:22 | 显示全部楼层
plusv 发表于 2021-7-15 18:28
807979023> 加格式和卷名后,xp  win7x32  win7x64 测试通过,win10x64失败。

我于 Windows XP/Window ...

哪里改错了?
  1. @echo off&color 1f&echo.
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for /f "delims=g" %%a in ('cmd /u /c Echo,有') do set "Tab=%%a"
  4. set w=wmic logicaldisk where "DriveType='3'"
  5. set /a max=1
  6. for /f "tokens=1-5" %%a in ('%w% get FileSystem^,freespace^,name^,size^,VolumeName^|find ":"')do (
  7.   set /p=分区%%c%Tab%<nul
  8.   call :GetSize %%b000 free
  9.   call :GetSize %%d000 size
  10.   set /a used=size-free
  11.   if !size! gtr 102400 (
  12.     set "G=GB" & set /a size/=1024,used/=1024
  13.   ) else set "G=MB"
  14.   set /a used=1000*used/size
  15.   if "!used:~,-1!" == "" set "used=0!used!"
  16.   set /p=大小: !size:~,-2!.!size:~-2!!G!%Tab%<nul
  17.   set free1=!free!
  18.   if !free! gtr 102400 (set /a free/=1024 & set "G=GB") else set "G=MB"
  19.   set /p=剩余: !free:~,-2!.!free:~-2!!G!%Tab%<nul
  20.   set /p=使用率: !used:~,-1!.!used:~-1!%%%Tab%<nul
  21.   set /p=卷标: %%e%Tab%<nul
  22.   set /p=格式: %%a%Tab%<nul & echo,
  23.   if !free1! gtr !max! set max=!free1!&&set mb=!free:~,-2!.!free:~-2!!G!&&set bc=%%c
  24. )
  25. echo.&echo 分区剩余最大: 分区%bc%    剩余: %mb%
  26. echo.&echo 按任意键退出...&pause >nul&exit

  27. :GetSize
  28. set "num=%1" & set "n=" & set "%2="
  29. for %%a in (16 8 4 2 1) do (
  30.   if not "!num:~%%a!"=="" set /a n+=%%a & set "num=!num:~%%a!"
  31. )
  32. set "num=%1" & set /a n-=6
  33. for /l %%a in (!n! -1 1) do (
  34.   set "s=!num:~,-%%a!"
  35.   if "!s:~,1!" == "0" set "s=!s:~1!"
  36.   set /a m=s%%1048576,s/=1048576
  37.   set "%2=!%2!!s!"
  38.   set "num=!m!!num:~-%%a!"
  39. )
  40. if not defined %2 (
  41.   set "%2=!num:~,-1!"
  42. ) else if "!%2:~,1!" == "0" set "%2=!%2:~1!"
  43. goto :EOF
复制代码

点评

我 12 年老 PC, Windows 7 X64 : 主系统. Windows XP(在 VMWare 中) : 测试软件. Windows 10 PE(在 VMWare 中) : 测试软件. Windows 10 (一台小 NoteBook 中) : 没什么在用,一个月开机一次. 批处理在 Windows  详情 回复 发表于 2021-7-16 01:41
回复

使用道具 举报

6#
发表于 2021-7-16 09:10:04 | 显示全部楼层
青青草 发表于 2021-7-15 20:21
已再次更新代码,麻烦你测试一下。
谢谢!

测试通过,由于截图保存在e盘,所以e盘剩余字节依次减少。
c盘是win7x32,win7x64安装后放在c盘一个文件夹中,需要时与根目录系统交换位置。
d盘是winxp,h盘是win10x64,启动后盘符为c,原c盘被隐藏。
所以都是同一硬盘实机测试。

2.jpg (198.52 KB, 下载次数: 115)

2.jpg

点评

谢谢!  详情 回复 发表于 2021-7-16 10:37
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-6 18:01

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表