是否可以编程方式查找映射驱动器中的可用空间?
如何使用ms-dos查找驱动器中可用空间的百分比。
在我们的硬盘上find驱动器的空闲空间可能很容易,但我需要find映射驱动器的空闲空间。
我已经在我的系统中映射了一些文件服务器。
在“我的电脑”中可以看到这一点,但是如何在命令提示符下显示呢?
(从服务器故障中的一个旧回答中获得)
可靠地获取可用磁盘空间的最简单方法是使用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
命令可以为我们删除它们:
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。
你需要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 }
您可以使用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来运行这些命令。
get-psdrive | 凡免费*