Как я могу использовать пакет, чтобы определить, какая версия Windows работает на компьютере? - PullRequest
0 голосов
/ 10 февраля 2019

Во время написания сценариев необходимо определить, какую версию Windows использует компьютер.Единственная проблема заключается в том, что Windows10 и Server2016 имеют одинаковые номер версии .

Это код в настоящее время.В этом состоянии Windows10 и Server2016 идентифицируются с одинаковым номером (который не работает).wmic os get version output = 10.0.18329

for /f "tokens=4-5 delims=. " %%i in ('ver') do set Operating=%%i.%%j
if "%Operating%" == "6.3" set Operating=Windows81
if "%Operating%" == "6.2" set Operating=Windows8
if "%Operating%" == "10.0" set Operating=Windows10
if "%Operating%" == "10.0" set Operating=Server2016
echo Is %Operating% your operating system?

Я хотел бы выполнить синтаксический анализ wmic os get name, чтобы получить имя ОС.Это показывает некоторые проблемы, потому что выходные данные состоят из нескольких строк и имеется произвольное количество символов до и после имени ОС («Windows 10»).


Это вывод wmic os get name на windows 10 pro:

Name
Microsoft Windows 10 Pro|C:\WINDOWS|\Device\Harddisk1\Partition3

Это вывод wmic os get name на сервере 2016:

Name                                                                       
Microsoft Windows Server 2016 Standard|C:\Windows|\Device\Harddisk0\Partition2

Ответы [ 4 ]

0 голосов
/ 23 февраля 2019

Вы можете использовать команду ver, вот пример:

@echo off
for /f "useback delimes=;" %%a in (`ver`) do set ver=%%a
echo The computer version your running is %ver%

Используйте переменную %ver% в качестве версии, которую вы используете, я использую ее для echo версии, но выс этим можно делать что угодно

0 голосов
/ 10 февраля 2019

Как насчет прямо вперед ...

@echo off
for /f "skip=1 delims=|" %%i in ('wmic os get name') do echo %%i & exit /b
0 голосов
/ 10 февраля 2019

Я знаю, что вы уже выбрали решение, но если это связано с последним заданным вами вопросом, сейчас удалено , где вы пытаетесь определить только между 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".

0 голосов
/ 10 февраля 2019

Это просто:

@echo off

for /F "skip=1 tokens=2-4 delims=| " %%A IN ('wmic os get name') do (
    set "os=%%A %%B %%C"
)

echo You are using %os%.

Другое возможное решение для включения всех версий Windows:

@echo off

for /F "skip=1 delims=|" %%A IN ('wmic os get name') do (
    for /F "delims=" %%B IN ("%%A") do (
        set "os=%%B"
    )
)

echo You are using %os:Microsoft =%.
pause
exit /b

, которое будет извлекать ОС, вычитая Microsoft<space> в конце в обоих случаях.

Во втором случае используются две петли, поскольку wmic имеет необычную линию окончания (<CR><CR><LF>).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...