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

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

WMIC.exe DiskDrive Get /Format:List

Пример вывода (разделенный и с форматированными объектами HTML):

PNPDeviceID=DISK&VEN_WDC_WD10&PROD_02FAEX-00Z3A0

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

WMIC.exe Volume Get /Format:List

Пример вывода:

DriveLetter=C:

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

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

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

Причина, по которой мне это нужно, заключается в том, чтобы завершить этот скрипт, который должен извлекать и исключать DeviceID из DriveLetter 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
3
ElektroStudios 29 Мар 2014 в 12:44

2 ответа

Лучший ответ

Имеет ли

diskpart /s diskpart.script

С двумя строчками в скрипте

select disk 0
detail disk

Помогите?

1
samd444 29 Мар 2014 в 22:47

Решение для получения идентификатора устройства жесткого диска, на котором хранится система (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
0
ElektroStudios 30 Мар 2014 в 10:07