Windows 命令行获取磁盘空间(以 GB 为单位)

Windows 命令行获取磁盘空间(以 GB 为单位)

我正在尝试创建一个批处理文件来提取服务器 C:\ 驱动器的总大小和可用空间(本地运行脚本)。我还需要输出易于阅读,因此字节不起作用,所以我可以使用创建临时 .vbs 文件的命令行。

以下内容似乎可行,但格式/数学不正确。

setlocal
for /f "tokens=6" %a in ('fsutil volume diskfree C: ^| find "of bytes"') do set diskspace=%a
echo wsh.echo FormatNumber(cdbl(%diskspace%)/1024, 0) > %temp%.\tmp.vbs
for /f %a in ('cscript //nologo %temp%.\tmp.vbs') do set diskspace=%a
del %temp%.\tmp.vbs
echo For example %diskspace%

上述命令也仅显示可用空间...我也想要总大小...想知道以下命令是否更适合提取信息:

WMIC LOGICALDISK GET Name,Size,FreeSpace | find /i "C:"

还请注意,我希望能够将其直接复制/粘贴到命令提示符中(而不是批处理文件 - 强制要求)。我已经从上面的代码中删除了“%%”。

注意:需要在 Server 2003+ 上本地运行(因此 Powershell 以及任何第三方实用程序都不可用)。

答案1

在下面不是批处理文件-强制要求子句,下一cmd行代码可能会有所帮助:

for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo( & @cscript //nologo %temp%\tmp.vbs & del %temp%\tmp.vbs

输出

==>for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FIND
STR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^
)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/
1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo( & @cscript //nolog
o %temp%\tmp.vbs & del %temp%\tmp.vbs

C: free=79,11 GiB size=111,45 GiB

D: free=929,47 GiB size=931,51 GiB

==>

答案2

我知道您现在正在寻找 VBS,但是 PowerShell 可以非常轻松地做到这一点:

$disk = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object Size, FreeSpace

Write-Host ("{0}GB total" -f [math]::truncate($disk.Size / 1GB))
Write-Host ("{0}GB free" -f [math]::truncate($disk.FreeSpace / 1GB))

第一行从 WMI 获取磁盘信息(此示例中仅获取 C:),并且仅选择可用空间和总大小。

在接下来的两行中将可用空间和总大小写入控制台,格式化为 GB,并截断小数部分。

示例输出(原样):

223GB total
125GB free

答案3

除以 1024 可得到 kibytes(2^10)。除以 1024 x 1024 可得到 Mibytes(2^20)。除以 1024 x 1024 x 1024 可得到 Gibytes(2^30)。

由于历史原因,Windows 将这些单位称为千字节、兆字节和千兆字节。我认为我的大小写是正确的。

因此,改变你的总数。

答案4

如果您只需要检查驱动器是否有足够的可用空间(例如安装或复制某些内容),您可以尝试这样的 wmic 查询:

wmic LogicalDisk where "DeviceID='c:' and FreeSpace > 10737418240" get DeviceID 2>&1 ^ | find /i "c:" >nul || (echo not enough space&exit 1)

如果 C 盘上的可用空间少于 10Gb,这将会中断批处理文件的执行:

相关内容