Используйте цикл for /F
, цикл , чтобы захватить выходные данные вашей командной строки wmic
:
for /F "skip=1" %%E in ('
wmic path Win32_PhysicalMemory get FormFactor
') do for /F %%F in ("%%E") do set "FF=%%F"
if %FF% equ 12 (
echo FormFactor is 12.
) else (
echo FormFactor is not 12.
)
Второй цикл for /F
в этом примере предотвращает появление артефактов (например,осиротевшие символы возврата каретки) из преобразования вывода Unicode wmic
в ANSI с помощью `for /F.
Если имеется более одного модуля памяти, цикл for /F
повторяется по всем из них,поэтому временная переменная FF
фактически содержит форм-фактор последней итерированной.
Если вы хотите выполнить код в окне командной строки, а не в пакетном файле, учтите, что вы должны заменить %%E
и %%F
от %E
и %F
соответственно.
Вы можете разрешить команде wmic
выполнять фильтрацию с помощью предложения where
:
wmic path Win32_PhysicalMemory where FormFactor=12 get FormFactor
Затем используйте команду find
, чтобы проверить, есть ли соответствующие элементы, например:
2> nul wmic path Win32_PhysicalMemory where FormFactor=12 get FormFactor /VALUE | > nul find "=" && (
echo FormFactor is 12.
) || (
echo FormFactor is not 12.
)
Переключатель /VALUE
изменяетсявывод wmic
во что-то вроде FormFactor=12
;find
затем используется для поиска возвращенных строк, содержащих =
.Из-за упомянутой фильтрации по where
совпадающего вывода нет вообще, если нет такого ожидаемого форм-фактора.Операторы &&
и ||
являются условными операторами, которые реагируют на возвращенный код выхода find
.
В любом случае, определение коэффициента формы модулей памятивероятно, не самый надежный способ выяснить, является ли ваш компьютер ноутбуком (мобильным);так как вы уже упоминали в комментарии , класс Win32_ComputerSystem
является более подходящим:
2> nul wmic path Win32_ComputerSystem where PCSystemType=2 get PCSystemType /VALUE | > nul find "=" && (
echo The computer is a laptop.
) || (
echo The computer is not a laptop.
)