Получить все буквы диска / диска - PullRequest
0 голосов
/ 02 июля 2019

Получить все буквы диска / диска

Пример:

Disk0 - C:, D:, E:
Disk1 - F:, G:, H:

Я хочу получить все буквы диска / диска.Я попробовал код:

WMIC PATH Win32_DiskDrive WHERE 'Index=0' Assoc:list /AssocClass:Win32_Volume

WMIC PATH Win32_DiskDrive WHERE 'Index=0' Assoc:list /ResultClass:Win32_DiskPartition

Но результат не так, как мне нужно.

Ответы [ 3 ]

1 голос
/ 02 июля 2019

Вот пример , не стесняйтесь попробовать и изменить его при необходимости.

@For /F Delims^=^= %%Z In ('Set Disk 2^>Nul')Do @Set "%%Z="
@For /F Delims^= %%V In ('WMIC DiskDrive Assoc^
 /AssocClass:Win32_DiskDriveToDiskPartition 2^>NUL^|Find /I "Disk #"'
)Do @For /F Tokens^=2Delims^=^" %%W In ("%%V"
)Do @For /F Tokens^=2^,4Delims^=^" %%X In ('WMIC Path^
 Win32_LogicalDiskToPartition 2^>NUL^|Find "%%W" 2^>Nul'
)Do @For /F "Tokens=2Delims=#," %%Z In ("%%X")Do @If Defined Disk%%Z (
    Call Set "Disk%%Z=%%Disk%%Z%% %%Y")Else Set "Disk%%Z=%%Y")
@Set Disk 2>NUL&&Pause

Пример вывода, (Windows 7) :

Disk0=C:
Disk2=E:
Disk3=F: G: H:
Press any key to continue . . .
0 голосов
/ 03 июля 2019

Возможно, вам придется сначала изучить типы дисков.Я предпочитаю fsutil , который поставляется с Windows:

R:\>for %d in  (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO @fsutil.exe fsinfo drivetype %d:\
A:\ - No such Root Directory
B:\ - No such Root Directory
C:\ - Fixed Drive
D:\ - Fixed Drive
E:\ - No such Root Directory
F:\ - No such Root Directory
G:\ - No such Root Directory
H:\ - No such Root Directory
I:\ - No such Root Directory
J:\ - No such Root Directory
K:\ - Removable Drive
L:\ - No such Root Directory
M:\ - No such Root Directory
N:\ - No such Root Directory
O:\ - No such Root Directory
P:\ - Fixed Drive
Q:\ - No such Root Directory
R:\ - Fixed Drive
S:\ - No such Root Directory
T:\ - No such Root Directory
U:\ - No such Root Directory
V:\ - No such Root Directory
W:\ - CD-ROM Drive
X:\ - Fixed Drive
Y:\ - Remote/Network Drive
Z:\ - No such Root Directory
0 голосов
/ 03 июля 2019

Я перебиваю твою партию Это правильно?

::@ECHO OFF
@For /F Delims^=^= %%Z In ('Set Disk 2^>Nul') Do @Set "%%Z="
@For /F Delims^= %%V In ('WMIC DiskDrive Assoc /AssocClass:Win32_DiskDriveToDiskPartition 2^>NUL^|Find /I "Disk #"') Do (
    @For /F Tokens^=2Delims^=^" %%W In ("%%V") Do (
        @For /F Tokens^=2^,4Delims^=^" %%X In ('WMIC Path Win32_LogicalDiskToPartition 2^>NUL^|Find "%%W" 2^>Nul') Do (
            @For /F "Tokens=2Delims=#," %%Z In ("%%X") Do (
                @If Defined Disk%%Z (
                    Call Set "Disk%%Z=%%Disk%%Z%% %%Y"
                ) Else (
                    Set "Disk%%Z=%%Y"
                )
            )
        )
    )
)
@Set Disk 2>NUL
Pause
...