How do I get a list of drive letters and their associated labels on a windows system through a bat file?
14 Answers
This will get most of it:
Net Use
If you have any drives mapped via subst you would also need to get those:
Subst
For completeness, you would do it like this in Powershell (if you are on windows 7 or have installed it):
gwmi win32_LogicalDisk -filter DriveType=4
You can also do it from the command prompt or a batch file using WMI like this:
wmic logicaldisk get caption,providername,drivetype,volumename
- 64,083
- 1,483
To use diskpart, there is no need to create an intermediate file. Try:
echo list volume | diskpart
- 161
@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
Fast, flexible and efficient. Although a little complex.
- 161
If anyone is lucky enough to be using Vista (Vista Ultimate SP2 b6002, in my case) and the gwmi and wmic snippets given here don't work exactly, here is what I did to make it work.
For gwmi, if you receive no output, try changing the DriveType to 3. If still having problems, remove the -filter option altogether and analyze output.
gwmi win32_LogicalDisk -filter DriveType=3
For wmic, if you receive "Invalid GET Expression", then try putting the get expression in quotes:
wmic logicaldisk get "caption,providername,drivetype,volumename"
- 51
mountvol
sample output
\\?\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,785
This site has a much simpler set of calls:
http://en.code-bude.net/2013/02/23/show-all-drives-in-command-prompt/
Show local drives:
wmic logicaldisk get deviceid, volumename, description
If you want to show only drives of a particular type, the wmic command can be further expanded to include a where clause.
wmic logicaldisk where drivetype=2 get deviceid, volumename, description
Types
0 => Unknown
1 => No Root Directory
2 => Removable Disk
3 => Local Disk
4 => Network Drive
5 => Compact Disc
6 => RAM Disk
- 21
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
- 171
Using wmic in a for loop to determine all the available drives.
@echo off
for /f "tokens=2*delims==" %%i in ('wmic logicaldisk get caption /value') do for /f "delims=" %%d in ("%%i") do echo %%d
There is also this little hack using exit codes 65 to 90 converted to ascii which will return all Alpabetical characters A to Z with all credit to Aacini.
@echo off
setlocal enabledelayedexpansion
for /L %%i in (65,1,90) do cmd /C exit %%i & if exist "!=ExitCodeAscii!:" echo !=ExitCodeAscii!:
- 101
Although it has enough answer, I'd like to add one when you want to use it in batch file. If you get "Invalid GET Expression", you could put a ^ before the ',', like below:
for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,providername^,drivetype^,volumename 2^>NUL`) do echo %%i %%l
- 111
Somewhat kludgy, but works from a batch file:
echo LIST VOLUME > temp.txt && diskpart /s temp.txt && del /q temp.txt
- 860
@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
- 1,183