Jak uzyskać listę liter dysków w systemie za pomocą powłoki systemu Windows (bat, cmd)?


Odpowiedzi:


36

To pozwoli uzyskać większość:

Net Use

Jeśli masz jakieś dyski zmapowane przez podstację, musisz je również uzyskać:

Subst

Dla kompletności, zrobiłbyś to w Powershell (jeśli korzystasz z Windows 7 lub zainstalowałeś go):

gwmi win32_LogicalDisk -filter DriveType=4

Możesz to również zrobić z wiersza polecenia lub pliku wsadowego, używając WMI w następujący sposób:

wmic logicaldisk get caption,providername,drivetype,volumename

1
Nie zawiera lokalnych napędów dyskowych, takich jak wewnętrzne dyski twarde lub cdromy. Czy coś brakuje?
Chris Magnuson

Nie, źle zrozumiałem pytanie. Myślałem, że chcesz tylko zamapowanych dysków. Będę edytować.
EBGreen,

2
Rozwiązanie WMIC powinno dać ci wszystko.
EBGreen,

Musisz usunąć cudzysłowy z wmic logicaldisk get „caption, providerername, driveetype”, aby był to wmic logicaldisk get caption, Provernername, typ napędu, w przeciwnym razie zgłasza błąd. EBGreen, którego od razu rzuciłeś mi do głowy na cały dzień, nigdy nie widziałem wmic, mimo że od tygodni piszę różne wersje serwerów i jestem bardzo podekscytowany, widząc, co jeszcze mogę z tym zrobić. Dobra robota!
Chris Magnuson

1
wmic logicaldisk get caption, nazwa dostawcy, typ napędu, volumename nazwa VolumeName była tym, czego mi brakowało, jeśli zaktualizujesz ją, zaakceptuję ją jako odpowiedź. Dzięki
Chris Magnuson,

15

Aby użyć diskpart, nie trzeba tworzyć pliku pośredniego. Próbować:

echo list volume | diskpart

2
To najlepsza odpowiedź i zwraca najwięcej informacji o zamontowanych dyskach w pięknym formacie.
ekerner

ale wymaga uprawnień administratora
LogicDaemon

9
@echo off
cls
setlocal enabledelayedexpansion
set "_DRIVE.LETTERS.FREE=Z Y X W V U T S R Q P O N M L K J I H G F E D C B A "
for /f "skip=1 tokens=1,2 delims=: " %%a in ('wmic logicaldisk get deviceid^,volumename') do (
   set "_DRIVE.LETTERS.USED=!_DRIVE.LETTERS.USED!%%a,%%b@"
   set "_DRIVE.LETTERS.FREE=!_DRIVE.LETTERS.FREE:%%a =!"
)
set _DRIVE.LETTERS.USED=%_DRIVE.LETTERS.USED:~0,-2%
set _DRIVE.LETTERS.USED=%_DRIVE.LETTERS.USED:,@=, @%
set _DRIVE.LETTERS

Szybki, elastyczny i wydajny. Chociaż trochę skomplikowane.


Nie wiem, na jakich wersjach systemu Windows to działa, ale właśnie przetestowałem go na moich systemach Windows 7 i XP i otrzymałem następujące dane wyjściowe z obu: `DRET LIST: USED:" = "DRIVE LIST: DARMOWE: „! TMP_FREE_DRIVE_LETTERS!” ”
John Gardeniers

Przepraszamy, musisz to umieścić na początku pliku wsadowego. setlocal włączony opóźniony rozwój
Dharma Leonardi

Zmodyfikowałem twoją odpowiedź, aby uwzględnić brakującą linię. Teraz działa. +1
John Gardeniers

7

zainspirowany Scott

for %i 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 @%i: 2>nul && set/pz=%i <nul

pokazuje również literę napędu CD. nie trzeba być administratorem.


proste i działa
Tyler Long

„W tym czasie byłem nieoczekiwany”.
Berit Larsen,

@BeritLarsen musisz podwoić% symboli, jeśli uruchamiasz go jako plik wsadowy, a nie w wierszu poleceń.
TessellatingHeckler

5
mountvol

próbka wyjściowa

\\?\Volume{11197e59-f977-11dd-afc6-111e6f6e6963}\
   *** NO MOUNTING POINT ***

\\?\Volume{11197e59-f977-11dd-afc6-111e6f6e6963}\
   D:\

\\?\Volume{11197e59-f977-11dd-afc6-111e6f6e6963}\
   C:\

\\?\Volume{11197e59-f977-11dd-afc6-111e6f6e6963}\
   E:\

4

Jeśli ktoś ma szczęście korzystać z Visty (w moim przypadku Vista Ultimate SP2 b6002), a podane tutaj fragmenty gwmi i wmic nie działają dokładnie, oto, co zrobiłem, aby działało.

W przypadku gwmi , jeśli nie otrzymasz danych wyjściowych, spróbuj zmienić DriveType na 3. Jeśli nadal masz problemy, całkowicie usuń opcję -filter i przeanalizuj dane wyjściowe.

gwmi win32_LogicalDisk -filter DriveType=3

W przypadku wmic , jeśli pojawi się „Nieprawidłowe wyrażenie GET”, spróbuj umieścić wyrażenie get w cudzysłowach:

wmic logicaldisk get "caption,providername,drivetype,volumename"

2

Ta strona ma znacznie prostszy zestaw połączeń:

http://en.code-bude.net/2013/02/23/show-all-drives-in-command-prompt/

Pokaż dyski lokalne:

wmic logicaldisk get deviceid, volumename, description


Jeśli chcesz wyświetlać tylko dyski określonego typu, komendę wmic można dodatkowo rozszerzyć o klauzulę where.

wmic logicaldisk gdzie driveetype = 2 get deviceid, volumename, description

Rodzaje

0 => Nieznany

1 => Brak katalogu głównego

2 => Dysk wymienny

3 => Dysk lokalny

4 => Dysk sieciowy

5 => Płyta kompaktowa

6 => Dysk RAM


2
@echo off
echo list volume > scriptdiskpart
diskpart/s scriptdiskpart
del scriptdiskpart
pause

Próbowałem tego i nie zadziałało. Myślę, że przed / s musi być spacja, ale nawet przy tej zmianie nie zadziałało. Umieszczam powyższe w pliku, d.bat i widzę, że okno diskpart miga, ale potem znika, a powłoka cmd, w której działam, pokazuje następnie uruchomioną pauzę.
slm

1
for %a in (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 @vol %a 2>&1 | find "drive"

Odkryłem, że podejście diskpart zgłasza napędy DVD bez włożonej płyty i nie zgłasza kart SD z prawidłowymi woluminami napędu


nie działa w systemie Windows XP
Tyler Long

1
for %%p 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 if exist %%p:\nul your_command_and_parameters_here

0

Nieco niewyraźne, ale działa z pliku wsadowego:

echo LIST VOLUME > temp.txt && diskpart /s temp.txt && del /q temp.txt

0

Chociaż ma wystarczającą odpowiedź, chciałbym ją dodać, jeśli chcesz użyć jej w pliku wsadowym. Jeśli pojawi się „Nieprawidłowe wyrażenie GET”, możesz wstawić ^ przed „,”, jak poniżej:

for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,providername^,drivetype^,volumename 2^>NUL`) do echo %%i %%l

Co to ^tutaj robi?
vonbrand

Jest to znak ucieczki cmd.exe, podobny do \ w Uniksie jak powłoki.
gimpf

-1
@ECHO OFF
IF NOT EXIST A: GOTO B
:A
VOL A:
:B
IF NOT EXIST B: GOTO C
VOL B:
:C
IF NOT EXIST C: GOTO D
VOL C:
:D
IF NOT EXIST D: GOTO E
VOL D:
:E
IF NOT EXIST E: GOTO F
VOL E:
:F
IF NOT EXIST F: GOTO G
VOL F:
:G
IF NOT EXIST G: GOTO H
VOL G:
:H
IF NOT EXIST H: GOTO I
VOL H:
:I
IF NOT EXIST I: GOTO J
VOL I:
:J
IF NOT EXIST J: GOTO K
VOL J:
:K
IF NOT EXIST K: GOTO L
VOL K:
:L
IF NOT EXIST L: GOTO M
VOL L:
:M
IF NOT EXIST M: GOTO N
VOL M:
:N
IF NOT EXIST N: GOTO O
VOL N:
:O
IF NOT EXIST O: GOTO P
VOL O:
:P
IF NOT EXIST P: GOTO Q
VOL P:
:Q
IF NOT EXIST Q: GOTO R
VOL Q:
:R
IF NOT EXIST R: GOTO S
VOL R:
:S
IF NOT EXIST S: GOTO T
VOL S:
:T
IF NOT EXIST T: GOTO U
VOL T:
:U
IF NOT EXIST U: GOTO V
VOL U:
:V
IF NOT EXIST V: GOTO W
VOL V:
:W
IF NOT EXIST w: GOTO X
VOL W:
:X
IF NOT EXIST X: GOTO Y
VOL X:
:Y
IF NOT EXIST Y: GOTO Z
VOL Y:
:Z
IF NOT EXIST Z: GOTO END
VOL Z:
:END

Wow. Jeśli więc możesz go destylować na coś, co w rzeczywistości po prostu wyprowadziłoby litery napędu i etykiety istniejące w systemie, które byłyby bliższe odpowiedzi na pytanie, chociaż jest to najmniej ruch we właściwym kierunku.
Chris Magnuson

Czy jestem głosowany za dostarczenie rozwiązania spełniającego kryteria? Wow ...
Scott,

4
Po pierwsze, generuje błędy dla napędów, które istnieją, ale nie zawierają nośników, takich jak napęd CD / DVD.
Wstrzymano do odwołania.

+1 za pomysł
Tyler Long

niech żyje chiński kod!
LogicDaemon
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.