Командний рядок Windows, щоб отримати фізичний розмір диска в ГБ


1

Я хочу відобразити всю додану модель diskdrive, ім'я, індекс та розмір у командному рядку, який я використовую нижче простий код

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

Вихід

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

Я хочу той же вихід, що і вище, за винятком того, що я хотів би, щоб розмір відображався в ГБ

Я думаю, що є певний спосіб зробити це за допомогою циклів і тимчасових файлів vb.

Я спеціально шукаю Windows cmd код. Хтось може допомогти?

Я в змозі зробити перетворення розміру і відобразити його на 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

Вихід

\\.\PHYSICALDRIVE0 Size=238.47 (GB)

Але я все ще не в змозі правильно відобразити назву моделі. Я просто не в змозі змусити цикл працювати за призначенням (у моєму випадку в назві моделі є пробіли між наведеними нижче кодами, щоб просто надрукувати моделі.

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

Вихід

SAMSUNG SSD PM830 2.5" 7

Чи може хтось допомогти мені у поєднанні обох кодів таким чином, щоб вони відображалися як

SAMSUNG SSD PM830 2.5" 7  \\.\PHYSICALDRIVE0  Size=238.47 (GB)


Звичайно, це можна зробити. Ви можете надіслати висновок WMIC у файл (використовуючи щось на кшталт / OUTPUT: або шляхом перенаправлення), і VBScript прочитав файл. Або ви просто можете мати VBScript взаємодія з WMI (замість того, щоб використовувати WMIC), що може бути простіше. Як тільки ви отримаєте числа у VBScript, поділ повинно бути простим.
TOOGAM

Відповіді:


0

Розрахунки в cmd з set / A обмежені підписаними 32-бітовими числами, тому для математики вам потрібен vbscript або PowerShell. Замість використання пакетних, wmic та vbscript у мене є гібридний файл batch / vbscript, який позбавляє від необхідності створювати тимчасові файли. Недолік - це повторення rem &, необхідне, щоб обидві версії сценарію прийняли файл.

Збережіть це як .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 

Виведення на мою систему (німецька мова)

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 . . .
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.