yjqd 发表于 2020-9-5 22:22:29

批处理如何获取剩余空间最大的分区


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

nttwqz 发表于 2020-9-6 10:46:13

一种是fsutil,速度快,单位字节
一种是diskpart,速度慢,单位是大小而定
一种是wmic,PE一般没有这个组件。

yjqd 发表于 2020-9-6 12:19:04

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

fsutil、diskpart、wmic三个组件pe中均有,也能获取各分区剩余空间,但自动获取剩余空间最大的分区盘符不会写

9zhmke 发表于 2020-9-6 15:31:13

本帖最后由 9zhmke 于 2020-9-6 15:35 编辑

fsutil快就用fsutil吧:

@echo off
setlocal enabledelayedexpansion
for /f "tokens=1*" %%i in ('fsutil fsinfo drives') do set drv=%%j
set tmp=%drv:\=%
set drv=%tmp: =%
echo %drv%
set free=0
set max=C
:LOOP
for /f "tokens=1* delims=:" %%i in ("%drv%") do (
      fsutil volume diskfree %%i:
      for /f "tokens=2* delims=:" %%d in ('fsutil volume diskfree %%i:') do set last=%%d
      set last=!last:~0,-6!
      if !free! leq !last! echo ok& set max=%%i& set free=!last!
      set drv=%%j)
if defined drv goto LOOP

不能上传bat,txt改为bat即可: 其实我想说用VBS轻松很多的,考虑到有可能PE环境还是忍住了

yjqd 发表于 2020-9-7 00:41:23

9zhmke 发表于 2020-9-6 15:31
fsutil快就用fsutil吧:




谢谢回复

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

我的pe有vbs功能,你能否写一个vbs脚本来获取剩余空间最大的分区盘符

9zhmke 发表于 2020-9-7 16:07:07

yjqd 发表于 2020-9-7 00:41
谢谢回复

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

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

yjqd 发表于 2020-9-7 18:21:42

9zhmke 发表于 2020-9-7 16:07
这个应该可以用吧? 能用就不必另写一套了吧?
关于临时文件夹,我倒是认为可以从C开始查看,只要能有 ...

能用,准确,谢谢

sairen139 发表于 2020-9-22 15:05:02

一般来说都是fsutil最快!

dos时代菜鸟 发表于 2020-9-23 20:37:57

本帖最后由 dos时代菜鸟 于 2020-9-23 20:59 编辑

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




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


@echo off
setlocalENABLEDELAYEDEXPANSION
set free=0
set bit=5

echo Drv,Free,max_free
for /f"skip=1 delims=" %%c in (' wmic volume get Driveletter^,freespace') do (
    for /f "tokens=1,2 delims= " %%i in ("%%c") do (
      if not "%%j"=="" (
            set free2=%%j
            set free_x=!free2:~0,-%bit%!
            if !free_x! gtr !free! (
                set max_d=%%i
                set free=!free_x!
                set free.=!free2:~-%bit%!
            )
      echo %%i %%j !free!!free.!
      )
    )
)
echo.
if not "!max_d!"=="" ( echo MAX_FREE_DRV=!MAX_D!) ELSE (echo 没有可用分区!)

pause

yjqd 发表于 2020-9-28 15:55:53

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




谢谢

pe下获取盘符速度还是很快的且准确

pznpt 发表于 2020-10-18 15:44:36

@echo off & setlocal enabledelayedexpansion
set "zero=00000000000000000000"
set "maxfree=%zero%"
for %%a in (C,D,E,F,G) do (
    for /f "tokens=3" %%b in ('dir /a /-c %%a:\') do set "free=%zero%%%b"
    if "!free:~-20!" gtr "!maxfree!" (
      set "maxfree=!free:~-20!"
      set "letter=%%a"
    )
)
echo,%letter% %maxfree%
pause

江月独白 发表于 2020-10-18 16:54:30

收藏一下
页: [1]
查看完整版本: 批处理如何获取剩余空间最大的分区