Linha de comando do Windows para obter o tamanho da unidade física em GB

1

Eu quero exibir todo o modelo, nome, índice e tamanho de unidade de disco anexado na linha de comando Eu estou usando o código abaixo simples

    wmic diskdrive GET index,caption,name,size /format:table

Saída

Caption                   Index  Name                Size
SAMSUNG SSD PM830 2.5" 7  0      \.\PHYSICALDRIVE0  256052966400
Seagate backup plus       1      \.\PHYSICALDRIVE1  536870912000

Eu quero a mesma saída que a acima, exceto que gostaria que o tamanho fosse exibido em GB

Acho que há uma maneira de fazer isso usando loops for e arquivos temp vb.

Estou procurando especificamente o código cmd do Windows. Alguém pode ajudar?

Eu posso fazer a conversão de tamanho e exibi-la no cmd

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

Saída

\.\PHYSICALDRIVE0 Size=238.47 (GB)

Mas ainda não consigo exibir o nome do modelo corretamente. Não consigo fazer meu loop for executar como pretendido (no meu caso, o nome do modelo tem espaços entre O código abaixo funciona para obter apenas o modelos impressos.

    for /f "tokens=1-5 skip=1" %a in ('wmic diskdrive GET model') do @echo. %a %b %c %d %e

Saída

SAMSUNG SSD PM830 2.5" 7

Alguém pode me ajudar a combinar os dois códigos de modo que ele seja exibido como

SAMSUNG SSD PM830 2.5" 7  \.\PHYSICALDRIVE0  Size=238.47 (GB)
    
por LadyDextrous 23.11.2016 / 09:31

1 resposta

0

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 . . .
    
por 23.11.2016 / 22:07