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

Bon*_*rse 15 windows batch command-line vbscript

我正在尝试创建一个批处理文件来提取服务器的 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%
Run Code Online (Sandbox Code Playgroud)

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

WMIC LOGICALDISK GET Name,Size,FreeSpace | find /i "C:"
Run Code Online (Sandbox Code Playgroud)

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

注意:需要在 Server 2003+ 上本机运行(因此 Powershell 以及任何 3rd 方实用程序已经过时)。

Ƭᴇc*_*007 13

我意识到您现在正在寻找 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))
Run Code Online (Sandbox Code Playgroud)

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

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

示例输出(原样):

223GB total
125GB free
Run Code Online (Sandbox Code Playgroud)


Jos*_*efZ 11

非批处理文件 - 强制要求条款下,下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
Run Code Online (Sandbox Code Playgroud)

输出

==>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

==>
Run Code Online (Sandbox Code Playgroud)