PDA

Показать полную графическую версию : [решено] Определение типа системного диска, SSD или HDD


dorosa
16-10-2012, 21:17
Добрый вечер!

Появилась задачка для авто установки Windows.
Нужно определить тип системного диска, SSD или HDD, для применения соответствующих настроек.
Как это можно сделать из бат файла (SetupComplete.cmd)?
Устроит вариант и с дополнительным скриптом или утилитой.

Bruce Wayne
28-09-2013, 17:53
Если кому-нибудь когда-то пригодится, то вот, что у меня получилось:

@echo off

for /f "tokens=4-5 delims=. " %%a in ('ver') do set os_ver=%%a.%%b
if %os_ver% GTR 6.1 (set i=SCSI
set x=0x40) else (set i=IDE
set x=0x0)

set SSD=0
set HDD=0
set SSD2=0
set HDD2=0
set SSD3=0
set HDD3=0

for /f "tokens=1-8 delims=\" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Enum\%i%" /s ^| find /i "Disk" 2^> nul') do (for /f "usebackq tokens=2*" %%i in (`reg query "%%a\%%b\%%c\%%d\%%e\%%f\%%g"^|Find /I "Capabilities"`) do if %%j==%x% (set HDD=1) else (set SSD=1))

if %os_ver% LSS 6.1 (if %SSD%==1 (echo SSD) else (echo HDD)
pause
exit)

for /f "tokens=1-8 delims=\" %%a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Enum\%i%" /s ^| find /i "Disk" 2^> nul') do (for /f "usebackq tokens=2*" %%i in (`reg query "%%a\%%b\%%c\%%d\%%e\%%f\%%g"^|Find /I "ContainerID"`) do if %%j=={00000000-0000-0000-ffff-ffffffffffff} (set HDD2=1) else (set SSD2=1))

set /a SSD3=%SSD%+%SSD2%
if %SSD3%==2 (echo SSD) else (echo HDD)
pause

Правда, этот скрипт выдаст SSD, если в системе есть хотя бы один такой тип носителя, и HDD - если SSD отсутствует совсем.

Vadikan
02-10-2013, 11:52
Bruce Wayne, я делал так http://www.outsidethebox.ms/14817/#_Toc351312873

Bruce Wayne
03-10-2013, 15:13
Vadikan, я думал над этим, но единственный минус приведённого Вами способа в том, что не обязательно порог скорости совпадёт даже сейчас, не говоря уже о будущем, когда выйдут более быстрые носители. Но спасибо :)

Vadikan
04-10-2013, 13:15
но единственный минус приведённого Вами способа в том, что не обязательно порог скорости совпадёт даже сейчас, не говоря уже о будущем, когда выйдут более быстрые носители. »
Минус моего способа вовсе не в этом. Навскидку, их два:

1. winsat может не отработать из-за проблем с планами электропитания. Но даже это можно обойти:

Экспортировать существующие.
Вернуть стандартные (powercfg -restoredefaultschemes)
Выполнить оценку.
Импортировать экспортированные.


2. Не учитывается RAID.

Что же касается порога скорости, то я (не говоря уж о Microsoft) не вижу причин, по которым HDD должны превысить 8мб/с в скорости случайного чтения. Даже если такое произойдет, поднимите порог до 25 :) Пруфы http://www.outsidethebox.ms/14845/#_Toc351637941




© OSzone.net 2001-2012