如何通过Windows Shell(蝙蝠,cmd)获取系统上的驱动器号列表?


Answers:


36

这将得到大部分:

Net Use

如果您有任何通过subst映射的驱动器,则还需要获取这些驱动器:

Subst

为了完整起见,您可以在Powershell中这样做(如果您在Windows 7上或已经安装了它):

gwmi win32_LogicalDisk -filter DriveType=4

您也可以使用WMI在命令提示符或批处理文件中执行以下操作:

wmic logicaldisk get caption,providername,drivetype,volumename

1
该列表未列出本地磁盘驱动器,如任何内部硬盘驱动器或cdrom。我想念什么吗?
克里斯·马格努森

不,我误解了这个问题。我以为您只想要映射的驱动器。我会编辑。
EBGreen

2
WMIC解决方案应该为您提供一切。
EBGreen

您需要从wmic logicaldisk获取“标题,提供者名称,驱动器类型”的引号中删除引号,以便它是wmic logicaldisk获取标题,提供者名称,驱动器类型的其他方式,否则会引发错误。EBGreen那天让您全力以赴,尽管有数周编写各种服务器构建脚本的经验,但我从未见过wmic,我为能用它做些什么而感到非常兴奋。做得好!
克里斯·马格努森

1
wmic logicaldisk获取标题,提供者名称,驱动器类型,卷名VolumeName是我所缺少的,如果用它来更新,我将接受它作为答案。谢谢
克里斯·马格努森

15

要使用diskpart,无需创建中间文件。尝试:

echo list volume | diskpart

2
这是最佳答案,并且以精美的格式返回有关已安装驱动器的最多信息。
ekerner

但它需要管理员权限
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

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


我不知道可以在哪个版本的Windows上运行,但我只是在Win 7和XP计算机上对其进行了测试,并且从这两个计算机上都获得了以下输出:`DRIVE LETTER(s):USED:“ =” DRIVE LETTER(s):免费:“!TMP_FREE_DRIVE_LETTERS!”
约翰·

抱歉,您需要将其放在批处理文件的开头。setlocal enabledelayedexpansion
Dharma Leonardi

我已经编辑了您的答案,以包括缺少的行。现在可以使用了。+1
John Gardeniers

7

受斯科特启发

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

还显示CD驱动器号。无需成为管理员。


简单且有效
泰勒·朗

“这一次我很意外。”
Berit Larsen 2015年

@BeritLarsen如果将其作为批处理文件而不是在命令行上运行,则需要将%符号加倍。
TessellatingHeckler

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

4

如果有人幸运地能够使用Vista(在我的情况下为Vista Ultimate SP2 b6002),并且此处给出的gwmiwmic代码段无法正常运行,这就是我所做的工作。

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

gwmi win32_LogicalDisk -filter DriveType=3

对于wmic,如果收到“无效的GET表达式”,请尝试将get表达式放在引号中:

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

2

该站点的呼叫集要简单得多:

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

显示本地驱动器:

Wmic logicaldisk获取设备ID,卷名,描述


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

WMIC逻辑磁盘,其中drivetype = 2获取设备标识,卷名,描述

种类

0 =>未知

1 =>没有根目录

2 =>可移动磁盘

3 =>本地磁盘

4 =>网络驱动器

5 =>光盘

6 => RAM磁盘


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

我尝试了这个,但是没有用。我认为/ s前面必须有一个空格,但是即使进行了更改,它也不起作用。我把上面的文件放在了d.bat文件中,我看到diskpart窗口闪烁了,但是随后消失了,我正在运行的cmd shell出现了暂停。
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"

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


不适用于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

有点笨拙,但可以在批处理文件中工作:

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

0

尽管它有足够的答案,但是我想在批处理文件中使用它时添加一个。如果收到“无效的GET表达式”,则可以在','之前加上^,如下所示:

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

这在^做什么?
vonbrand

它是cmd.exe的转义字符,类似于Unix中的\,如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

嗯哇 因此,如果您可以将其提炼成实际上只是输出系统上存在的驱动器号和标签的内容,则这将更接近问题的答案,尽管这是朝正确方向的最少移动。
克里斯·马格努森

我因提供符合标准的解决方案而被否决吗?哇...
斯科特

4
好吧,一方面,它会为已存在但不包含任何介质的驱动器(例如CD / DVD驱动器)产生错误。
暂停,直到另行通知。

这个想法+1
泰勒·朗

都欢呼中文代码!
LogicDaemon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.