Если оператор основан на результате запроса WMI - PullRequest
0 голосов
/ 26 ноября 2018

Действительно борясь с синтаксисом WMI, любая помощь будет принята с благодарностью.

У меня есть 2 ключа reg, и я хочу выполнить запрос WMI, чтобы определить, является ли мой компьютер ноутбуком или настольным компьютером.Затем я хочу импортировать ключ reg на основе результата.Если настольный компьютер, импортируйте desktop.reg, Если ноутбук, импортируйте laptop.reg.

Я использовал WMI запрос:

wmic path Win32_PhysicalMemory get FormFactor

и выход 12 = SODIMMпамять, так что ноутбук.Как можно реализовать следующее?

1015

Точка в правильном направлении очень ценится!

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Хотя цикл for /f (как показано в aschipfl) является правильным методом для вывода команд в переменную, здесь он на самом деле не нужен:

wmic path Win32_PhysicalMemory get FormFactor|find "12" >nul && goto :Laptop || goto :desktop
goto :eof
:desktop
  echo This is a desktop
  goto :eof
:laptop
  echo this is a laptop
  goto :eof
0 голосов
/ 26 ноября 2018

Используйте цикл 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.
)
...