Wie erhalte ich eine Liste der Laufwerksbuchstaben auf einem System über eine Windows-Shell (bat, cmd)?

25

Wie erhalte ich eine Liste der Laufwerksbuchstaben und der zugehörigen Bezeichnungen auf einem Windows-System über eine Fledermausdatei?

Chris Magnuson
quelle

Antworten:

36

Dies wird das meiste davon bekommen:

Net Use

Wenn Sie Laufwerke über Subst zugeordnet haben, müssten Sie auch diese abrufen:

Subst

Der Vollständigkeit halber würden Sie es in Powershell so machen (wenn Sie Windows 7 verwenden oder es installiert haben):

gwmi win32_LogicalDisk -filter DriveType=4

Sie können dies auch über die Eingabeaufforderung oder eine Stapeldatei mit WMI wie folgt tun:

wmic logicaldisk get caption,providername,drivetype,volumename
EBGreen
quelle
1
Hier werden keine lokalen Laufwerke wie interne Festplatten oder CDs aufgelistet. Vermisse ich etwas?
Chris Magnuson
Nein, ich habe die Frage falsch verstanden. Ich dachte, Sie wollten nur zugeordnete Laufwerke. Ich werde bearbeiten.
EBGreen
2
Die wmic Lösung sollte Ihnen alles geben.
EBGreen
Sie müssen die Anführungszeichen von wmic logicaldisk entfernen, um "caption, providername, drivetype" abzurufen, damit es wmic logicaldisk ist, um caption, providername, drivetype abzurufen, andernfalls wird ein Fehler ausgegeben. EBGreen Sie haben mich für den Tag im Alleingang umgehauen, ich habe noch nie wmic gesehen, obwohl ich seit Wochen verschiedene Server-Builds skripte, und ich bin äußerst gespannt, was ich sonst noch damit anfangen kann. Gut gemacht!
Chris Magnuson
1
wmic logicaldisk get caption, providername, drivetype, volumename was mir gefehlt hat war der volume name, wenn du deins damit aktualisierst werde ich es als antwort akzeptieren. Vielen Dank
Chris Magnuson
15

Um diskpart zu verwenden, muss keine Zwischendatei erstellt werden. Versuchen:

echo list volume | diskpart
gnoise
quelle
2
Dies ist die beste Antwort und gibt die meisten Informationen zu den bereitgestellten Laufwerken in einem schönen Format zurück.
ekerner
Aber es erfordert Administratorrechte
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

Schnell, flexibel und effizient. Obwohl etwas komplex.

Dharma Leonardi
quelle
Ich weiß nicht, auf welchen Windows-Versionen dies funktioniert, aber ich habe es gerade auf meinen Win 7- und XP-Rechnern getestet und von beiden die folgende Ausgabe erhalten: `DRIVE LETTER (s): USED:" = "DRIVE LETTER (s): FREE: "! TMP_FREE_DRIVE_LETTERS!"
John Gardeniers
Entschuldigung, Sie müssen dies am Anfang der Batch-Datei einfügen. setlocal enabledelayedexpansion
Dharma Leonardi
Ich habe Ihre Antwort bearbeitet, um die fehlende Zeile einzuschließen. Es funktioniert jetzt. +1
John Gardeniers
7

inspiriert von 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

Zeigt auch den Buchstaben des CD-Laufwerks an. Keine Notwendigkeit, Administrator zu sein.

Yuning
quelle
Einfach und funktioniert
Tyler Long
"Ich war zu diesem Zeitpunkt unerwartet."
Berit Larsen
@BeritLarsen Sie müssen% Symbole verdoppeln, wenn Sie es als Batch-Datei anstatt in der Befehlszeile ausführen.
TessellatingHeckler
5
mountvol

Beispielausgabe

\\?\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:\
Jader Dias
quelle
4

Wenn jemand das Glück hat , Vista (in meinem Fall Vista Ultimate SP2 b6002) zu verwenden, und die hier angegebenen gwmi- und wmic- Snippets nicht genau funktionieren, habe ich Folgendes getan, damit es funktioniert.

Wenn Sie für gwmi keine Ausgabe erhalten, versuchen Sie, DriveType auf 3 zu ändern. Wenn weiterhin Probleme auftreten, entfernen Sie die Option -filter vollständig und analysieren Sie die Ausgabe.

gwmi win32_LogicalDisk -filter DriveType=3

Wenn Sie für wmic "Ungültiger GET-Ausdruck" erhalten, versuchen Sie, den get- Ausdruck in Anführungszeichen zu setzen:

wmic logicaldisk get "caption,providername,drivetype,volumename"
tdowg1
quelle
2

Diese Seite hat eine viel einfachere Reihe von Aufrufen:

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

Lokale Laufwerke anzeigen:

wmic logicaldisk get deviceid, volumename, description


Wenn Sie nur Laufwerke eines bestimmten Typs anzeigen möchten, kann der Befehl wmic um eine where-Klausel erweitert werden.

Wmic LogicDisk mit Laufwerkstyp = 2 Get DeviceID, Volumenname, Beschreibung

Typen

0 => Unbekannt

1 => Kein Stammverzeichnis

2 => Wechseldatenträger

3 => Lokale Festplatte

4 => Netzlaufwerk

5 => CD

6 => RAM Disk

David Tr
quelle
2
@echo off
echo list volume > scriptdiskpart
diskpart/s scriptdiskpart
del scriptdiskpart
pause
5d4gd
quelle
Ich habe es versucht und es hat nicht funktioniert. Ich denke, es muss ein Leerzeichen vor dem / s sein, aber selbst mit dieser Änderung hat es nicht funktioniert. Ich habe das Obige in eine Datei geschrieben, d.bat und ich sehe, wie das Diskpart-Fenster aufleuchtet, aber dann verschwindet und die Cmd-Shell, auf der ich das ausführe, zeigt dann die laufende Pause.
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"

Ich habe festgestellt, dass der Diskpart-Ansatz DVD-Laufwerke ohne eingelegte Disk meldet und keine SD-Karten mit gültigen Laufwerksvolumes

Nick
quelle
funktioniert nicht für 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
pbies
quelle
0

Etwas kludig, funktioniert aber aus einer Batch-Datei:

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

Obwohl es genügend Antworten gibt, möchte ich eine hinzufügen, wenn Sie sie in einer Batch-Datei verwenden möchten. Wenn Sie "Ungültiger GET-Ausdruck" erhalten, können Sie ein ^ vor das ',' setzen, wie unten dargestellt:

for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,providername^,drivetype^,volumename 2^>NUL`) do echo %%i %%l
Mingjiang Shi
quelle
Was macht das ^hier?
Vonbrand
Es ist das Escape-Zeichen von cmd.exe, ähnlich wie \ in Unix-Shells.
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
Scott
quelle
Ähm, wow. Wenn Sie das also in etwas destillieren können, das tatsächlich nur die Laufwerksbuchstaben und -bezeichnungen ausgibt, die auf dem System vorhanden sind, wäre dies näher an der Antwort auf die Frage, obwohl dies die geringste Bewegung in die richtige Richtung ist.
Chris Magnuson
Ich werde für die Bereitstellung einer Lösung, die die Kriterien erfüllt, abgelehnt. Wow ...
Scott
4
Zum einen führt dies zu Fehlern bei Laufwerken, die zwar vorhanden sind, jedoch keine Medien enthalten, z. B. ein CD- / DVD-Laufwerk.
Bis auf weiteres angehalten.
+1 für die Idee
Tyler Long
alle begrüßen den chinesischen Code!
LogicDaemon