web-dev-qa-db-fra.com

Comment obtenir une liste de lettres de lecteur sur un système via un shell Windows (bat, cmd)?

Comment puis-je obtenir une liste des lettres de lecteur et leurs étiquettes associées sur un système Windows via un fichier bat?

26
Chris Magnuson

Cela obtiendra l'essentiel:

Net Use

Si vous avez des disques mappés via subst, vous devrez également les obtenir:

Subst

Pour être complet, vous le feriez comme ceci dans Powershell (si vous êtes sous Windows 7 ou si vous l'avez installé):

gwmi win32_LogicalDisk -filter DriveType=4

Vous pouvez également le faire à partir de l'invite de commandes ou d'un fichier de commandes en utilisant WMI comme ceci:

wmic logicaldisk get caption,providername,drivetype,volumename
37
EBGreen

Pour utiliser diskpart, il n'est pas nécessaire de créer un fichier intermédiaire. Essayer:

echo list volume | diskpart
15
gnoise
@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

Rapide, flexible et efficace. Bien qu'un peu complexe.

10
Dharma Leonardi

inspiré par 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

affiche également la lettre du lecteur de CD. pas besoin d'être administrateur.

7
Yuning
mountvol

exemple de sortie

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

Si quelqu'un a de chance assez pour utiliser Vista (Vista Ultimate SP2 b6002, dans mon cas) et le gwmi et - wmic les extraits donnés ici ne fonctionnent pas exactement, voici ce que j'ai fait pour le faire fonctionner.

Pour gwmi, si vous ne recevez aucune sortie, essayez de changer le DriveType à 3. Si vous rencontrez toujours des problèmes, supprimez complètement l'option -filter et analysez la sortie.

gwmi win32_LogicalDisk -filter DriveType=3

Pour wmic, si vous recevez "Expression GET non valide", essayez de mettre l'expression get entre guillemets:

wmic logicaldisk get "caption,providername,drivetype,volumename"
4
tdowg1
@echo off
echo list volume > scriptdiskpart
diskpart/s scriptdiskpart
del scriptdiskpart
pause
2
5d4gd

Ce site a un ensemble d'appels beaucoup plus simple:

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

Afficher les lecteurs locaux:

wmic logicdisk get deviceid, volumename, description


Si vous souhaitez afficher uniquement les lecteurs d'un type particulier, la commande wmic peut être développée pour inclure une clause where.

wmic logicdisk où drivetype = 2 get deviceid, volumename, description

Les types

0 => Inconnu

1 => Pas de répertoire racine

2 => Disque amovible

3 => Disque local

4 => Lecteur réseau

5 => Disque compact

6 => RAM disque

2
David Tr
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
1
pbies
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"

J'ai trouvé que l'approche diskpart signale les lecteurs de DVD sans disque inséré et ne signale pas les cartes SD avec des volumes de lecteur valides

1
Nick

Un peu maladroit, mais fonctionne à partir d'un fichier batch:

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

Bien qu'il ait suffisamment de réponses, j'aimerais en ajouter un lorsque vous souhaitez l'utiliser dans un fichier batch. Si vous obtenez "Expression GET non valide", vous pouvez mettre un ^ avant le ',', comme ci-dessous:

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