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.