2014-03-29 3 views
3

Мне нужно определить букву диска идентификатора производителя жесткого диска (или, возможно, наоборот, я тоже мог бы это сделать).Перевести письмо с жестким диском в соответствующий идентификатор устройства (или наоборот)

Команда для извлечения идентификаторов производителя:

WMIC.exe DiskDrive Get /Format:List 

Пример вывода (расщепляется и с HTML-сущностей отформатированных):

PNPDeviceID=DISK&VEN_WDC_WD10&PROD_02FAEX-00Z3A0 

Команда для извлечения буквы диска:

WMIC.exe Volume Get /Format:List 

Пример:

Проблема заключается в том, что я не могу найти какое-либо полезное свойство, которое я мог бы связывать с обоих выходов, чтобы сделать запрос, я имею в виду, что я не знаю, что делать с идентификаторами производителя, чтобы искать букву диска каждого ID, я не вижу способа идентифицировать букву диска идентификатора.

Так что в тот момент, когда я получаю DeviceID DISK&VEN_WDC_WD10&PROD_02FAEX-00Z3A0 Мне нужно перевести его на эквивалентный driveLetter, который равен C:, вот и все.

Я попытался с помощью WMIC инструмента «, потому что я не знаю, как связать эту информацию с помощью собственных инструментов командной строки, представленных в Windows, но на самом деле не является полной необходимым для меня accomplis этой задачи экранной к WMI классам, я мог принять решение с использованием других предустановленных инструментов в Windows (возможно, ?), или решение в VBScript должно быть принято также, но для среды работы я не могу выполнить эту задачу на любых других языках (включая native PowerShell), а также не использовать Сторонние инструменты, такие как утилита Devcon, предоставляемая Microsoft.

Причина, почему я должен это закончить этот сценарий, который должен восстановить и исключить DeviceID из Буква_диска C::

@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 
+0

Хммм, это смутное вопрос для меня, потому что один диск может содержит множество разделов. – Xearinox

+0

@Xearinox Я думаю, что это не так, потому что раздел не является диском, а дисковый раздел должен указывать на диск, я работаю с идентификатором производителя жесткого диска. – ElektroStudios

+0

Да, но я пытаюсь преобразовать письмо в идентификатор диска. Что делать, если на одном диске есть буквы C, D, E. – Xearinox

ответ

1

ли

diskpart /s diskpart.script 

с двумя линиями в сценарии

select disk 0 
detail disk 

help?

+0

Да, это было идеально, чтобы сделать запрос в WMIC с моделью жесткого диска, я опубликовал решение, если кому-то это интересно. Благодарю. – ElektroStudios

0

Решение, чтобы получить идентификатор устройства жесткого диска, который хранит системы (C :)

@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 

 Смежные вопросы

  • Нет связанных вопросов^_^