Cálculos em cmd com set / A são limitados a números assinados de 32 bits, então você precisa de vbscript ou PowerShell para fazer as contas.
Em vez de usar batch, wmic e vbscript, tenho aqui um arquivo batch / vbscript híbrido que elimina a necessidade de criar arquivos temporários. Uma desvantagem é um eco rem &
, que é necessário para que as duas versões do script aceitem o arquivo.
Salve isso como um arquivo .cmd / .bat
rem^ &@cls&cscript //nologo //e:vbscript "%~f0"&Pause&exit /b
On Error Resume Next
sComputer = "."
Set oWMI = GetObject("winmgmts:\" & sComputer & "\root\cimv2")
Set cItems = oWMI.ExecQuery("Select * from Win32_DiskDrive",,48)
sOut = ""
For Each oItem in cItems
sOut = sOut & JL(26,oItem.Model) & JL(20,oItem.Name) & "Size=" & _
JR(8,FormatNumber(cdbl(oItem.Size)/1024/1024/1024, 2)) & " (GiB)" &vbCRLF
Next
Set cItems = Nothing
wscript.echo sOut
Function JL(Places, Value) ' Justify Left within Places
If len (Value) < Places then
JL=Left(Value & Space(Places), Places)
Else
JL=Value
End If
end Function
Function JR(Places, Value) ' Justify Right within Places
If Len (Value) < Places then
JR = Right(Space(Places) & Value, Places)
Else
JR=Value
End If
end Function
Saída no meu sistema (alemão)
Hitachi HDS722020ALA330 \.\PHYSICALDRIVE2 Size=1.863,01 (GiB)
VB0250EAVER \.\PHYSICALDRIVE0 Size= 232,88 (GiB)
ST2000DL003-9VT166 \.\PHYSICALDRIVE1 Size=1.863,01 (GiB)
Drücken Sie eine beliebige Taste . . .