如何通过Windowsshell(bat,cmd)获取系统上的驱动器号的列表?

如何通过bat文件获取Windows系统上的驱动器号及其相关标签列表?

    这将得到它的大部分:

    Net Use 

    如果你有任何驱动器通过subst映射,你也需要得到那些:

     Subst 

    为了完整起见,您可以在PowerShell中执行此操作(如果您使用的是Windows 7或已安装它):

     gwmi win32_LogicalDisk -filter DriveType=4 

    您也可以使用WMI从命令提示符或batch file执行此操作:

     wmic logicaldisk get caption,providername,drivetype,volumename 

    要使用diskpart,不需要创build中间文件。 尝试:

     echo list volume | diskpart 
     @echo off cls setlocal enabledelayedexpansion set "_DRIVE.LETTERS.FREE=ZYXWVUTSRQPONMLKJIHGF EDCBA " 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 

    快速,灵活,高效。 虽然有点复杂。

    受斯科特启发

     for %i in (abcdefghijklmnopqrstu vwxyz) do @%i: 2>nul && set/pz=%i <nul 

    也显示CD盘符。 不需要成为pipe理员。

    如果任何人有幸能够使用Vista(Vista Ultimate SP2 b6002,在我的情况下),这里给出的gwmiwmic片段并不完全正确,那么这就是我所做的工作。

    对于gwmi ,如果您没有收到任何输出,请尝试将DriveType更改为3.如果仍有问题,请完全删除-filter选项并分析输出。

     gwmi win32_LogicalDisk -filter DriveType=3 

    对于wmic ,如果您收到“无效GETexpression式”,请尝试将getexpression式放在引号中:

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

    样本输出

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

    这个网站有一个更简单的调用:

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

    显示本地驱动器:

    wmic logicaldisk get deviceid,volumename,description


    如果只想显示特定types的驱动器,则可以进一步扩展wmic命令以包含where子句。

    wmic logicaldisk其中drivetype = 2获取deviceid,volumename,description

    types

    0 =>未知

    1 =>没有根目录

    2 =>可移动磁盘

    3 =>本地磁盘

    4 =>networking驱动器

    5 =>光盘

    6 => RAM磁盘

     @echo off echo list volume > scriptdiskpart diskpart/s scriptdiskpart del scriptdiskpart pause 
     for %%p in (abcdefghijklmnopqrstu vwxyz) do if exist %%p:\nul your_command_and_parameters_here 

    有点笨拙,但从batch file:

     echo LIST VOLUME > temp.txt && diskpart /s temp.txt && del /q temp.txt 
     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" 

    我发现diskpart方法报告没有插入光盘的DVD驱动器,并且不报告具有有效驱动器卷的SD卡

    虽然它有足够的答案,我想添加一个,当你想在batch file中使用它。 如果你得到“无效的GETexpression式”,你可以把^放在','之前,如下所示:

     for /F "usebackq tokens=1,2,3,4 " %%i in (`wmic logicaldisk get caption^,providername^,drivetype^,volumename 2^>NUL`) do echo %%i %%l 
     @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