Получить букву диска из VolumeID / VolumeIndex / PartitionID / PartitionIndex - PullRequest
0 голосов
/ 07 июня 2019

Я хочу получить букву диска из VolumeID / VolumeIndex / PartitionID / PartitionIndex

Я нашел кусочки, но это Получить номер диска из метки

@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
::Get disk number from label

IF "%1."=="." ECHO Missing or Wrong Parameter&GOTO :EOF

SET MyDisk=
SET Mylabel=%1
FOR /F "delims=" %%A IN ('Echo List Volume^|Diskpart^|FIND /I "%Mylabel%"') DO SET Myvol=%%A
IF NOT DEFINED Myvol ECHO ERROR: NO LABEL FOUND&GOTO :EOF
FOR /F "tokens=1 delims=0123456789" %%A IN ("%Myvol%") DO SET /A Myvol=!Myvol:%%A=! 2>nul

FOR /F "delims=" %%A IN ('
^(
ECHO Sel Vol %MyVol%^&ECHO det vol
^)^|diskpart^|FIND "*" 
') DO SET Mydisk=%%A

IF NOT DEFINED Mydisk ECHO ERROR: NO DISK NUMBER FOUND&GOTO :EOF

FOR /F "tokens=1 delims=0123456789" %%A IN ("%MyDisk%") DO SET /A Mydisk=!Mydisk:%%A=! 2>nul

ECHO Volume with label %Mylabel% is on DISK %MyDisk% and it is Volume #%Myvol%

Это другие части, который будет PowerShell, а не CMD. Соотнесите идентификатор физического устройства с идентификатором устройства тома

Get-WmiObject Win32_DiskDrive | ForEach-Object {
  $disk = $_
  $partitions = "ASSOCIATORS OF " +
                "{Win32_DiskDrive.DeviceID='$($disk.DeviceID)'} " +
                "WHERE AssocClass = Win32_DiskDriveToDiskPartition"
  Get-WmiObject -Query $partitions | ForEach-Object {
    $partition = $_
    $drives = "ASSOCIATORS OF " +
              "{Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} " +
              "WHERE AssocClass = Win32_LogicalDiskToPartition"
    Get-WmiObject -Query $drives | ForEach-Object {
      $driveLetter = $_.DeviceID
      $fltr        = "DriveLetter='$driveLetter'"
      New-Object -Type PSCustomObject -Property @{
        Disk        = $disk.DeviceID
        DriveLetter = $driveLetter
        VolumeName  = $_.VolumeName
        VolumeID    = Get-WmiObject -Class Win32_Volume -Filter $fltr |
                      Select-Object -Expand DeviceID
      }
    }
  }
}

[void][System.Console]::ReadKey($true)

Кто-нибудь, помогите мне.Спасибо.

1 Ответ

0 голосов
/ 19 июня 2019

Я нашел это:

FOR /F delims^=\^"^ tokens^=5^,11 %%A IN ('WMIC Path Win32_LogicalDiskToPartition Get /Format:csv ^|FIND "Disk #1, Partition #0"') DO ECHO %%B

Как добавить ГДЕ это же:

WMIC Path Win32_LogicalDiskToPartition Where "Disk #1, Partition #0" get PartitionLetter

Мне нужно получить письмо «Диск № 1, Раздел № 0».

...