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.