(摘自我在服务器故障上的旧答案)
可靠地获取可用磁盘空间的最简单方法是使用 WMI。当尝试解析输出时dir
你会遇到各种有趣的问题,至少在使用其他语言的 Windows 版本时是这样。您可以使用wmic
查询驱动器上的可用空间:
wmic logicaldisk where "DeviceID='C:'" get FreeSpace
这将输出类似的内容
FreeSpace
197890965504
您可以通过添加以下内容将其强制写入一行/format:value
switch:
> 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,否则这应该有效。