无忧启动论坛

标题: 批处理如何获取剩余空间最大的分区 [打印本页]

作者: yjqd    时间: 2020-9-5 22:22
标题: 批处理如何获取剩余空间最大的分区

比如只有一块硬盘,5个分区,如何获取剩余空间最大的分区盘符

作者: nttwqz    时间: 2020-9-6 10:46
一种是fsutil,速度快,单位字节
一种是diskpart,速度慢,单位是大小而定
一种是wmic,PE一般没有这个组件。
作者: yjqd    时间: 2020-9-6 12:19
nttwqz 发表于 2020-9-6 10:46
一种是fsutil,速度快,单位字节
一种是diskpart,速度慢,单位是大小而定
一种是wmic,PE一般没有这个组 ...

fsutil、diskpart、wmic三个组件pe中均有,也能获取各分区剩余空间,但自动获取剩余空间最大的分区盘符不会写
作者: 9zhmke    时间: 2020-9-6 15:31
本帖最后由 9zhmke 于 2020-9-6 15:35 编辑

fsutil快就用fsutil吧:

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1*" %%i in ('fsutil fsinfo drives') do set drv=%%j
  4. set tmp=%drv:\=%
  5. set drv=%tmp: =%
  6. echo %drv%
  7. set free=0
  8. set max=C
  9. :LOOP
  10. for /f "tokens=1* delims=:" %%i in ("%drv%") do (
  11.         fsutil volume diskfree %%i:
  12.         for /f "tokens=2* delims=:" %%d in ('fsutil volume diskfree %%i:') do set last=%%d
  13.         set last=!last:~0,-6!
  14.         if !free! leq !last! echo ok& set max=%%i& set free=!last!
  15.         set drv=%%j)
  16. if defined drv goto LOOP
复制代码


不能上传bat,txt改为bat即可: test.txt (522 Bytes, 下载次数: 8) 其实我想说用VBS轻松很多的,考虑到有可能PE环境还是忍住了
作者: yjqd    时间: 2020-9-7 00:41
9zhmke 发表于 2020-9-6 15:31
fsutil快就用fsutil吧:

谢谢回复

在pe下常用imagex和dism,我要给它们设置临时文件夹,想在剩余空间最大的分区设置,所以需要一个获取剩余空间最大的分区盘符的代码

我的pe有vbs功能,你能否写一个vbs脚本来获取剩余空间最大的分区盘符
作者: 9zhmke    时间: 2020-9-7 16:07
yjqd 发表于 2020-9-7 00:41
谢谢回复

在pe下常用imagex和dism,我要给它们设置临时文件夹,想在剩余空间最大的分区设置,所以需要 ...

这个应该可以用吧? 能用就不必另写一套了吧?
关于临时文件夹,我倒是认为可以从C开始查看,只要能有你需要的空间就可以了,不必把每个分区都看一遍.比如常见的装系统什么的,有个1个G左右怎么也就够用了.
作者: yjqd    时间: 2020-9-7 18:21
9zhmke 发表于 2020-9-7 16:07
这个应该可以用吧? 能用就不必另写一套了吧?
关于临时文件夹,我倒是认为可以从C开始查看,只要能有 ...

能用,准确,谢谢
作者: sairen139    时间: 2020-9-22 15:05
一般来说都是fsutil最快!
作者: dos时代菜鸟    时间: 2020-9-23 20:37
本帖最后由 dos时代菜鸟 于 2020-9-23 20:59 编辑

这是用 wmic 实现的。win10 桌面环境下测试通过


get_free.7z (428 Bytes, 下载次数: 3)

因为以字节做单位,数据在 cmd 下会溢出,所以,要设置位数= 5.
又因为 wmic 在 cmd 下输出 会有 回车符参与文本流,所以,用了二次 for 来规避之。


  1. @echo off
  2. setlocal  ENABLEDELAYEDEXPANSION
  3. set free=0
  4. set bit=5

  5. echo Drv,Free,max_free
  6. for /f  "skip=1 delims=" %%c in (' wmic volume get Driveletter^,freespace') do (
  7.     for /f "tokens=1,2 delims= " %%i in ("%%c") do (
  8.         if not "%%j"=="" (
  9.             set free2=%%j
  10.             set free_x=!free2:~0,-%bit%!
  11.             if !free_x! gtr !free! (
  12.                 set max_d=%%i
  13.                 set free=!free_x!
  14.                 set free.=!free2:~-%bit%!
  15.             )
  16.         echo %%i %%j !free!!free.!
  17.         )
  18.     )
  19. )
  20. echo.
  21. if not "!max_d!"=="" ( echo MAX_FREE_DRV=!MAX_D!) ELSE (echo 没有可用分区!)

  22. pause
复制代码

作者: yjqd    时间: 2020-9-28 15:55
dos时代菜鸟 发表于 2020-9-23 20:37
这是用 wmic 实现的。win10 桌面环境下测试通过

谢谢

pe下获取盘符速度还是很快的且准确
作者: pznpt    时间: 2020-10-18 15:44
  1. @echo off & setlocal enabledelayedexpansion
  2. set "zero=00000000000000000000"
  3. set "maxfree=%zero%"
  4. for %%a in (C,D,E,F,G) do (
  5.     for /f "tokens=3" %%b in ('dir /a /-c %%a:\') do set "free=%zero%%%b"
  6.     if "!free:~-20!" gtr "!maxfree!" (
  7.         set "maxfree=!free:~-20!"
  8.         set "letter=%%a"
  9.     )
  10. )
  11. echo,%letter% %maxfree%
  12. pause
复制代码

作者: 江月独白    时间: 2020-10-18 16:54
收藏一下




欢迎光临 无忧启动论坛 (http://wuyou.net./) Powered by Discuz! X3.3