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


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

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

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.


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.


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:\

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"

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


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

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


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

0

Etwas kludig, funktioniert aber aus einer Batch-Datei:

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

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

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

Ä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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.