Come ottenere un elenco di lettere di unità su un sistema tramite una shell di Windows (bat, cmd)?


Risposte:


36

Questo otterrà la maggior parte:

Net Use

Se hai delle unità mappate tramite subst dovresti anche ottenere quelle:

Subst

Per completezza, lo faresti in questo modo in Powershell (se sei su Windows 7 o lo hai installato):

gwmi win32_LogicalDisk -filter DriveType=4

Puoi anche farlo dal prompt dei comandi o da un file batch usando WMI in questo modo:

wmic logicaldisk get caption,providername,drivetype,volumename

1
Questo non elenca le unità disco locali come qualsiasi disco rigido interno o CDROM. Mi sto perdendo qualcosa?
Chris Magnuson,

No, ho frainteso la domanda. Pensavo volessi solo unità mappate. Lo modificherò.
EBGreen

2
La soluzione wmic dovrebbe darti tutto.
EBGreen

È necessario rimuovere le virgolette dal disco logico wmic ottenere "didascalia, nome provider, tipo di trasmissione" in modo che sia il disco logico wmic ottenere didascalia, nome provider, tipo di trasmissione altro saggio che genera un errore. EBGreen mi hai fatto impazzire da solo per la giornata, non ho mai visto wmic anche se ho scritto script su varie build di server per settimane e sono estremamente entusiasta di vedere cos'altro posso farci. Ottimo lavoro!
Chris Magnuson,

1
wmic logicdisk ottenere didascalia, nome provider, tipo di trasmissione, nome volum, VolumeName era quello che mi mancava, se aggiorni il tuo con quello lo accetterò come risposta. Grazie
Chris Magnuson,

15

Per utilizzare diskpart, non è necessario creare un file intermedio. Provare:

echo list volume | diskpart

2
Questa è la risposta migliore e restituisce il maggior numero di informazioni sulle unità montate in un bellissimo formato.
ekerner,

ma richiede i diritti di amministratore
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

Veloce, flessibile ed efficiente. Anche se un po 'complesso.


Non so su quali versioni di Windows funzioni, ma l'ho appena testato sui miei computer Win 7 e XP e ho ottenuto il seguente output da entrambi: `DRIVE LETTER (s): USED:" = "DRIVE LETTER (s): GRATUITO: "! TMP_FREE_DRIVE_LETTERS!" `
John Gardeniers,

Spiacenti, devi inserirlo all'inizio del file batch. setlocal enabledelayedexpansion
Dharma Leonardi

Ho modificato la tua risposta per includere la riga mancante. Ora funziona. +1
John Gardeniers,

7

ispirato da 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

mostra anche la lettera dell'unità CD. non c'è bisogno di essere admin.


semplice e funziona
Tyler Long,

"Sono stato inaspettato in questo momento."
Berit Larsen,

@BeritLarsen devi raddoppiare% simboli se eseguilo come file batch anziché sulla riga di comando.
TessellatingHeckler,

5
mountvol

uscita campione

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

Se qualcuno è abbastanza fortunato da usare Vista (Vista Ultimate SP2 b6002, nel mio caso) e i frammenti gwmi e wmic forniti qui non funzionano esattamente, ecco cosa ho fatto per farlo funzionare.

Per gwmi , se non si riceve alcun output, provare a cambiare DriveType in 3. Se i problemi persistono, rimuovere del tutto l'opzione -filter e analizzare l'output.

gwmi win32_LogicalDisk -filter DriveType=3

Per wmic , se ricevi "Espressione GET non valida", prova a inserire l' espressione get tra virgolette:

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

2

Questo sito ha un set di chiamate molto più semplice:

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

Mostra unità locali:

wmic logicaldisk get deviceid, volumename, descrizione


Se si desidera mostrare solo unità di un determinato tipo, il comando wmic può essere ulteriormente espanso per includere una clausola where.

wmic logicaldisk dove drivetype = 2 ottiene deviceid, nome volum, descrizione

tipi

0 => Sconosciuto

1 => Nessuna directory principale

2 => Disco rimovibile

3 => Disco locale

4 => Unità di rete

5 => Compact Disc

6 => Disco RAM


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

Ho provato questo e non ha funzionato. Penso che ci debba essere uno spazio davanti al / s ma anche con quel cambiamento non ha funzionato. Ho messo quanto sopra in un file, d.bat e vedo la finestra diskpart lampeggiare ma poi scompare e la shell cmd su cui sto eseguendo quindi mostra la pausa in esecuzione.
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"

Ho scoperto che l'approccio diskpart riporta unità DVD senza disco inserito e non riporta schede SD con volumi di unità validi


non funziona per 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

Un po 'kludgy, ma funziona da un file batch:

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

0

Sebbene abbia una risposta sufficiente, vorrei aggiungerne uno quando si desidera utilizzarlo nel file batch. Se ottieni "Espressione GET non valida", puoi inserire un ^ prima di ",", come di seguito:

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

Cosa fa questo ^qui?
vonbrand,

È il carattere di escape di cmd.exe, simile a \ in Unix come le shell.
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

Eeeek !!! Quindi, se riesci a distillarlo in qualcosa che in realtà produrrebbe solo le lettere e le etichette di unità esistenti sul sistema che sarebbero più vicine alla risposta alla domanda, anche se questo è il minimo movimento nella giusta direzione.
Chris Magnuson,

Vengo votato in negativo per aver fornito una soluzione che soddisfa i criteri? Wow ...
Scott,

4
Bene, per prima cosa, produce errori per le unità che esistono ma non contengono supporti, come un'unità CD / DVD.
In pausa fino a nuovo avviso.

+1 per l'idea
Tyler Long

tutti salutano il codice cinese!
LogicDaemon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.