如何查找映射驱动器的可用空间百分比?

时间:2010-03-29 15:44:27

标签: windows command-line scripting

是否可以以编程方式找到映射驱动器中的可用空间?

如何使用ms-dos查找驱动器中的可用空间百分比 在硬盘中找到驱动器的可用空间可能很容易,但我需要找到映射驱动器的可用空间。

我已在系统中映射了一些文件服务器。

可以在“我的电脑”中查看此内容,但如何在命令提示符下显示它?

4 个答案:

答案 0 :(得分:11)

(取自我在服务器故障中的旧答案)

可靠地获取可用磁盘空间的最简单方法是使用WMI。在尝试解析dir的输出时,您会遇到各种有趣的问题,至少在其他语言版本的Windows中。您可以使用wmic查询驱动器上的可用空间:

wmic logicaldisk where "DeviceID='C:'" get FreeSpace

这将输出类似

的内容
FreeSpace
197890965504

您可以通过添加/format:value开关强制执行此操作:

> wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value

FreeSpace=197890965504

那里有一些空行,但是(大约三到四行)不适合处理。幸运的是,当我们进行标记化时,for命令可以为我们删除它们:

for /f "usebackq delims== tokens=2" %x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%x

这里的好处是,因为我们只使用第二个令牌,所有空行(没有第二个令牌)都会被忽略。

在批处理文件中使用此标记时,请记住加倍%符号:

for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%%x

您现在可以使用存储在环境变量%FreeSpace%中的可用空间。


现在获取百分比有点棘手,因为批处理文件仅支持32位整数进行计算。但是,您可能不需要计算到字节;我认为兆字节已足够了:

for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get FreeSpace /format:value`) do set FreeSpace=%%x
for /f "usebackq delims== tokens=2" %%x in (`wmic logicaldisk where "DeviceID='C:'" get Size /format:value`) do set Size=%%x
set FreeMB=%FreeSpace:~0,-6%
set SizeMB=%Size:~0,-6%
set /a Percentage=100 * FreeMB / SizeMB
echo C: is %Percentage% % free

除非您的卷大于20 TiB,否则这应该有效。

答案 1 :(得分:1)

我发现最好的是 powershell:

Get-PSDrive -PSProvider FileSystem | select Name, Root, @{n="Used in GB";e=
{[math]::Round($_.Used/1GB,2)}}, @{n="Free in GB";e=
{[math]::Round($_.Free/1GB,2)}}, @{n="Percent Free";e=
{([math]::Round($_.Free/($_.Used+$_.Free),2))*100}}

您可以删除中间两个并返回到列和/或执行一种模拟 grep 并保留行版本的 get-string 函数。我没有做更多的事情,但比命令更喜欢它,任何窗口都应该有 powershell。

这个例子给你:

Name         : C
Root         : C:\
Used in GB   : 58.77
Free in GB   : 416.92
Percent Free : 88

或者这个:

 Get-PSDrive -PSProvider FileSystem | select Name, Root,@{n="Percent Free";e={([math]::Round($_.Free/($_.Used+$_.Free),2))*100}}
Name Root Percent Free
---- ---- ------------
C    C:\            88

答案 2 :(得分:0)

您需要GetDiskFreeSpaceEx。适用于驱动器,映射驱动器等。

ULARGE_INTEGER free;
ULARGE_INTEGER total;
ULARGE_INTEGER totalFree;
BOOL           ok;

ok = GetDiskSpaceFreeEx(path, &free, &total, &totalFree);
if (ok)
{
// do your sums here, then printf the result
}

答案 3 :(得分:0)

使用PowerShell可以非常轻松地在现代Windows中执行此操作。

此cmdlet将返回包含驱动器的详细表格以及有关其空间的一些信息。

get-psdrive | Where Free*

Name           Used (GB)     Free (GB) Provider      Root                                                                  CurrentLocation
----           ---------     --------- --------      ----                                                                  ---------------
C                 101.65         65.59 FileSystem    C:\                                                                  WINDOWS\system32
D                 801.55        129.96 FileSystem    D:\
R                 443.17       2351.22 FileSystem    R:\
X                 119.28        104.29 FileSystem    X:\

可能是获得您正在寻找的最简单,最短的方式。请记住启动PowerShell而不是cmd.exe来运行这些cmds。

  

get-psdrive |哪里有免费*