Get SSD or HDD type using wmic

@echo off

setlocal EnableDelayedExpansion


set MYCMD=wmic /namespace:\\root\microsoft\windows\storage path msft_physicaldisk


set DEV=0

set MTYPE=UNKNOWN

wmic /namespace:\\root\microsoft\windows\storage path msft_physicaldisk where deviceid=%DEV% get mediatype, deviceid, model

for /f "usebackq skip=1 tokens=*" %%i in (`%MYCMD% where deviceid^=%DEV% get mediatype`) do (if "!MTYPE!"=="UNKNOWN" set /A MTYPE=%%i)

if "%MTYPE%"=="4" set MTYPE=SSD

if "%MTYPE%"=="3" set MTYPE=HDD

echo Drive %DEV%=%MTYPE%


echo ==================

set DEV=1

set MTYPE=UNKNOWN

wmic /namespace:\\root\microsoft\windows\storage path msft_physicaldisk where deviceid=%DEV% get mediatype, deviceid, model

for /f "usebackq skip=1 tokens=*" %%i in (`%MYCMD% where deviceid^=%DEV% get mediatype`) do (if "!MTYPE!"=="UNKNOWN" set /A MTYPE=%%i)

if "%MTYPE%"=="4" set MTYPE=SSD

if "%MTYPE%"=="3" set MTYPE=HDD

echo Drive %DEV%=%MTYPE%


echo ==================

set DEV=2

set MTYPE=UNKNOWN

wmic /namespace:\\root\microsoft\windows\storage path msft_physicaldisk where deviceid=%DEV% get mediatype, deviceid, model

for /f "usebackq skip=1 tokens=*" %%i in (`%MYCMD% where deviceid^=%DEV% get mediatype`) do (if "!MTYPE!"=="UNKNOWN" set /A MTYPE=%%i)

if "%MTYPE%"=="4" set MTYPE=SSD

if "%MTYPE%"=="3" set MTYPE=HDD

echo Drive %DEV%=%MTYPE%


echo ==================

set DEV=3

set MTYPE=UNKNOWN

wmic /namespace:\\root\microsoft\windows\storage path msft_physicaldisk where deviceid=%DEV% get mediatype, deviceid, model

for /f "usebackq skip=1 tokens=*" %%i in (`%MYCMD% where deviceid^=%DEV% get mediatype`) do (if "!MTYPE!"=="UNKNOWN" set /A MTYPE=%%i)

if "%MTYPE%"=="4" set MTYPE=SSD

if "%MTYPE%"=="3" set MTYPE=HDD

echo Drive %DEV%=%MTYPE%


endlocal



This works under Windows but not under WinPE.

Note that under WinPE - wmic logicaldisk  get DriveType       should work, but  a formatted partition would be required and you need to specify a logical volumes not physical disk number.