Comment puis-je obtenir une liste des lettres de lecteur et leurs étiquettes associées sur un système Windows via un fichier bat?
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
Pour utiliser diskpart, il n'est pas nécessaire de créer un fichier intermédiaire. Essayer:
echo list volume | diskpart
@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.
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.
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:\
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"
@echo off
echo list volume > scriptdiskpart
diskpart/s scriptdiskpart
del scriptdiskpart
pause
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
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
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
Un peu maladroit, mais fonctionne à partir d'un fichier batch:
echo LIST VOLUME > temp.txt && diskpart /s temp.txt && del /q temp.txt
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