Windows 将硬盘驱动器号转换为相应的设备ID(或反之亦然)
我需要识别硬盘设备制造商ID的驱动器号(或者我也可以这样做) 用于检索制造商ID的命令:Windows 将硬盘驱动器号转换为相应的设备ID(或反之亦然),windows,batch-file,command-line,wmi,wmic,Windows,Batch File,Command Line,Wmi,Wmic,我需要识别硬盘设备制造商ID的驱动器号(或者我也可以这样做) 用于检索制造商ID的命令: WMIC.exe DiskDrive Get /Format:List 输出示例(拆分并格式化HTML实体): 用于检索驱动器号的命令: WMIC.exe Volume Get /Format:List 示例输出: DriveLetter=C: 问题是我无法从两个输出中找到任何有用的属性来进行查询,我的意思是我不知道如何使用制造商ID来搜索每个ID的驱动器号,我看不到任何方法来识别ID的驱动器号 因此
WMIC.exe DiskDrive Get /Format:List
输出示例(拆分并格式化HTML实体):
用于检索驱动器号的命令:
WMIC.exe Volume Get /Format:List
示例输出:
DriveLetter=C:
问题是我无法从两个输出中找到任何有用的属性来进行查询,我的意思是我不知道如何使用制造商ID来搜索每个ID的驱动器号,我看不到任何方法来识别ID的驱动器号
因此,在我获得设备ID磁盘&venu WDC\u WD10&PROD\u 02FAEX-00Z3A0
的那一刻,我需要将其转换为等效的驱动器号,即C:
,仅此而已
我曾尝试使用WMIC
工具,因为我不知道如何使用Windows中提供的本机命令行工具关联此信息,但对于我完成此任务来说,确实不完全必要。根据WMI
类,我可以接受使用Windows中其他预安装工具的解决方案(可能是BCDedit
?),或者也可以接受使用VBScript
语言的解决方案,但对于环境环境,我不能使用任何其他语言(包括本机PowerShell
)执行此任务,也不能使用Microsoft提供的第三方工具,如Devcon
实用程序
我之所以需要它,是为了完成这个脚本,它应该检索并排除DriveLetterC:
的DeviceID:
@Echo OFF & REM Mode con cols=150 lines=50
:: Exclude this drive during the process.
Set "ExcludedDrive=C:"
:: This variable should be set later,
:: Stores the device ID of the drive letter excluded above.
Set "ExcludedID="
REM ************
REM PSEUDO CODE:
REM ************
REM
REM To get Volume Information:
REM WMIC.exe Volume Get /Format:List
REM WMIC.exe Volume Where 'DriveLetter="C:"' Get /Format:CSV
REM
REM To get DiskDrive Information:
REM WMIC.exe DiskDrive Get /Format:List
REM
REM :: Identify the drive letter of each DeviceID to add exclusions
REM For Each %%DriveLetter in %ExcludedDrive% do (
REM
REM :: Retrieve an WMIC Result
REM Set WMIC_Query_Result=¿?
REM Set WMIC_Query_Result_DriveLetter=¿?
REM Set WMIC_Query_Result_DeviceID=¿?
REM
REM If %WMIC_Query_Result_DriveLetter% EQU %%DriveLetter (
REM Set "ExcludedID=%WMIC_Query_Result_DeviceID%"
REM )
REM )
REM
REM ******************
REM END OF PSEUDO CODE
REM ******************
For /F "Tokens=* Delims=" %%a In (
'REG.exe Query "HKLM\SYSTEM\CurrentControlSet\Enum\SCSI" ^| Find /I "Disk&"'
) Do (
Echo "%%a" | Find /I "%ExcludedID%" || (
For /F "Tokens=* Delims=" %%b In ('REG.exe Query "%%~a"') Do (
Reg.exe ADD "%%b\Device Parameters\Disk" /V "UserWriteCacheSetting" /T "REG_DWORD" /D "0x00000000" /F 1>NUL
)
)
)
Pause&Exit
做
脚本中有两行
select disk 0
detail disk
帮助?获取存储系统的硬盘驱动器的设备ID的解决方案(C:)
嗯,这对我来说是一个模糊的问题,因为一个驱动器可能包含多个分区。@Xearinox我认为不是因为分区不是驱动器,并且分区驱动器号应该指向驱动器,我正在使用驱动器的硬盘驱动器制造商ID。是的,但如果我理解,您可以尝试将驱动器号转换为驱动器ID。如果我在一个磁盘上有字母C、D、E怎么办。@Xearinox是的,但所有这些分区都将指向您知道的同一个硬盘驱动器!:P然后我设想应该能够检索分区的独立驱动器和该驱动器的设备ID(无论是否按该顺序),无论如何,我要澄清的是,每个磁盘有一个分区(加上C:中创建Windows OS的隐藏分区),并且没有RAID,谢谢你comment@Xearinox-不太快:)使用磁盘条带化和RAID技术,物理驱动器和逻辑卷之间可能存在多对多关系。单个驱动器可以包含多个分区(卷),单个卷可以分布在多个驱动器上。应该有一种在两者之间映射的方法,但是多对多的关系使事情复杂化。是的,这非常适合在WMIC中对硬盘模型进行查询,如果有人感兴趣,我已经发布了解决方案。谢谢
diskpart /s diskpart.script
select disk 0
detail disk
@Echo OFF & Setlocal EnableDelayedExpansion
(
REM Diskpart Script to get details about the System's Hard Drive.
Echo Select Disk=System
Echo Detail Disk
) > "%TEMP%\Diskpart.tmp"
For /F "Tokens=*" %%# in (
'Diskpart /S "%TEMP%\Diskpart.tmp" ^| Find /I "Disk Device"'
) Do (
For /F "Tokens=1,2,* Delims=\ " %%a in (
'WMIC.exe DiskDrive Where Model^="%%#" Get PNPDeviceID /Format:CSV ^| Find /I "&"'
) Do (
Set "DeviceID=%%b"
Set "DeviceID=!DeviceID:&=&!"
)
)
Echo "!DeviceID!"
Pause&Exit /B 0