@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
这将得到大部分:
如果您有任何通过 subst 映射的驱动器,您还需要获取这些驱动器:
为了完整起见,您可以在 Powershell 中这样做(如果您在 Windows 7 上或已安装它):
您也可以从命令提示符或使用 WMI 的批处理文件执行此操作,如下所示:
要使用 diskpart,无需创建中间文件。尝试:
快速、灵活、高效。虽然有点复杂。
受斯科特启发
还显示 CD 驱动器号和网络安装的磁盘号。无需拥有管理员权限。
样本输出
如果有人幸运地使用了 Vista(在我的例子中是 Vista Ultimate SP2 b6002),而这里给出的gwmi和wmic片段不能完全正常工作,那么我就是这样做的。
对于gwmi,如果您没有收到输出,请尝试将 DriveType 更改为 3。如果仍然有问题,请完全删除 -filter 选项并分析输出。
对于wmic,如果您收到“无效的 GET 表达式”,请尝试将get表达式放在引号中:
这个站点有一组更简单的调用:
http://en.code-bude.net/2013/02/23/show-all-drives-in-command-prompt/
显示本地驱动器:
wmic logicaldisk 获取设备ID、卷名、描述
如果您只想显示特定类型的驱动器,可以进一步扩展 wmic 命令以包含 where 子句。
wmic logicaldisk where drivetype=2 get deviceid, volumename, description
类型
0 => 未知
1 => 没有根目录
2 => 可移动磁盘
3 => 本地磁盘
4 => 网络驱动器
5 => 光盘
6 => 内存盘
我发现 diskpart 方法报告没有插入光盘的 DVD 驱动器,并且不报告具有有效驱动器卷的 SD 卡