Я знаю, что вы уже выбрали решение, но если это связано с последним заданным вами вопросом, сейчас удалено , где вы пытаетесь определить только между Windows 8
, Windows 8.1
, Windows 10
и Windows Server 2016
тогда я бы предложил что-то вроде этого:
@Echo Off
Set "_S="
For /F "EOL=P Tokens=*" %%A In ('"WMIC OS Get ProductType,Version 2>Nul"'
) Do For /F "Tokens=1-3 Delims=. " %%B In ("%%A") Do Set /A _S=%%B,_V=%%C%%D
If Not Defined _S Exit /B
If %_V% Lss 62 Exit /B
If %_S% Equ 1 (If %_V% Equ 62 Set "_S=Windows8"
If %_V% Equ 63 Set "_S=Windows81"
If %_V% Equ 100 Set "_S=Windows10"
) Else If %_V% Equ 100 (Set "_S=Server2016") Else Exit /B
Set _S
Pause
Exit /B
[Edit /]
… и дляуниверсальный метод, вы можете найти это полезным, особенно использование свойства Caption
, (которое я бы посоветовал гораздо лучше, чем использование свойства Name
, разделение его по первому символу канала, выполнение его черездругой цикл For
с удалением одного или нескольких символов пробела) .:
@For /F Tokens^=6Delims^=^" %%A In ('WMIC OS Get Caption/Format:MOF')Do Set "_S=%%A"
Чтобы проверить это, просто добавьте вторую строку:
@Set _S&Pause
Примечание. Этот методможет иметь проблемы в некоторых более ранних операционных системах из-за ошибки, которая не позволяет им найти местоположение файла .xsl
. Для этого есть обходные пути: либо скопируйте файлы .xsl
из своего «языкового» каталога на уровень, либо укажите полный путь к файлу .xsl
, например, /Format:"%__AppDir__%wbem\en-US\MOF.xsl"
.