Как определить, является ли моя система Windows 10 с помощью командной строки? [Дубликат]

32

Я работаю с InstallAnywhere, старой программой для создания установщиков. Я хотел бы установить конкретный файл, только в случае Windows XP и Windows Vista.

Из-за ограничений InstallAnywhere это невозможно. Я могу решить удалить файл только после того, как он уже установлен, на основе правила.

В рамках этого правила я могу проверять платформу, на которой я работаю, что дает мне возможность проверять Windows XP, Windows Vista, Windows 7 и т. Д., Но не Windows 10. Я не могу сказать «Выполнить это действие, когда система не XP или Vista ", поэтому мне нужно сказать" Выполните это действие на всех тех платформах, которые не XP или Vista ".

Тем не менее, я могу запустить команды командной строки и поймать результат, поэтому вот мой вопрос: есть ли команда, которую я могу использовать для определения, работаю ли я в системе Windows 10?

Dominique
источник
winverпоявится диалоговое окно «О Windows», если набрано cmd или Start. Будет ли это работать? В качестве альтернативы - stackoverflow.com/questions/1792740/…
Tetsujin
Спасибо за ответ, но я ищу команду командной строки, которая дает ответ в командной строке, я не могу использовать информацию в пакетном режиме, когда появляется окно сообщения.
Доминик
Проверьте версию cmd.exe, она самая простая и поддерживается, по крайней мере, со времен XP. Есть вопрос по этому поводу.
KeyWeeUsr
2
Версии google cmd, каждая ОС имеет свой номер версии, вы можете проверить это, и вам не нужен ни один ненужный длинный скрипт или другая программа - здесь
KeyWeeUsr
5
Просто введите ver. Например, в моей системе Windows 7 я получаю «Microsoft Windows [Версия 6.1.7601]», которая говорит мне, что я работаю под управлением Windows 7 (с версией 6.1 ).
Андреас Рейбранд

Ответы:

54

Есть ли команда, чтобы определить, работаю ли я в системе Windows 10?

Вы можете использовать wmic.

Следующая команда вернет версию Windows.

wmic os get Caption | findstr /v Caption

Пример вывода:

F:\test>wmic os get Caption | findstr /v Caption
Microsoft Windows 7 Home Premium

Если вам нужна дополнительная информация, вы можете использовать следующий пакетный файл (GetOS.cmd), который будет извлекать и отображать:

  • Версия операционной системы
  • Пакет обновления основной версии
  • Архитектура (64 или 32 бит)
@echo off
setlocal
setlocal enabledelayedexpansion
set _os=
set _sp=
rem use findstr to strip blank lines from wmic output
rem get OS
for /f "usebackq skip=1 tokens=3" %%i in (`wmic os get caption ^| findstr /r /v "^$"`) do (
  set "_os=%%i"
  )
rem get Service Pack
for /f "usebackq skip=1 tokens=*" %%i in (`wmic os get ServicePackMajorVersion ^| findstr /r /v "^$"`) do (
  set "_sp=%%i"
  )
rem get Architecture
for /f "usebackq skip=1 tokens=*" %%i in (`wmic OS get OSArchitecture ^| findstr /r /v "^$"`) do (
  set "_bits=%%i"
  )
echo Operating System Version: %_os%
echo Service Pack Major Version: %_sp%
echo Architecture: %_bits%
endlocal

Версия ОС хранится в %_os, основная версия пакета обновления хранится в %_sp%, а архитектура хранится в %_bits%.

Заметки:

  • Не полностью протестирован, так как у меня нет всех комбинаций ОС и Service Pack для тестирования.

  • Команда forизвлекает только 3-ю часть (токен) ОС. Это будет работать для настольных версий (если вы хотите отличить Server 2008 от других версий, вам нужно будет найти другое решение).

  • %_osбудет установлен в одно из следующих значений: Server, Vista, 7, 8, 8.1или 10.

Пример вывода:

F:\test>GetOS
Operating System Version: 7
Service Pack Major Version: 1
Architecture: 64-bit

F:\test>

Дальнейшее чтение

ДэвидПостилл
источник
2
После некоторого тестирования я решил использовать следующую команду:wmic os get Caption | findstr /V Caption
Доминик
@DavidPostill Я проверил командный файл. Я думаю, что это нужно pauseперед тем, endlocalчтобы дать пользователю возможность прочитать вывод до закрытия окна. Это тоже для вас?
Мэтью,
1
@ Matthew Я думаю, что ожидание состоит в том, что какая-то другая система будет запускать пакетный файл и захватывать его вывод (или он будет вызван вручную из существующего окна командной строки).
TripeHound
@mathew пауза не требуется при запуске из командной строки. Ответ должен показать технику, а не соответствовать всем сценариям.
DavidPostill
1
@mathew откройте командную строку, где вы сохранили файл, и наберите getos
DavidPostill
35

Я не могу поверить в это долго и без веры команду

C:\>ver

Microsoft Windows [Version 10.0.10586]

C:\>

Он работает в перенаправлениях, так что вы можете сделать

ver | find "Version 10."

Но обычно вы должны писать «для этой и всех будущих версий», чтобы лучше перечислять предыдущие.

Джошуа
источник
К вашему сведению ver, в PowerShell не работает. Это CMDспецифично.
Келтари
3
@Keltari Но iex "ver"делает!
Бен N
Вывод verможет быть немного обманчивым. На машине я сижу, сейчас она возвращается Microsoft Windows [Version 6.1.7601]. Но я совершенно уверен, что он работает под управлением Windows 7, а не Windows 6.
Филипп
@Philipp Да, Windows 7 и 8 являются «настоящими» патчами Vista, 6.1 и 6.2 соответственно; основной удар версии строго маркетинг. Я не знаю, являются ли изменения в Windows 10 достаточно значительными, чтобы оправдать существенное повышение версии. (С точки зрения жесткой разработки программного обеспечения, основная версия любого программного обеспечения должна только когда-либо подниматься, чтобы указывать на разрыв обратной совместимости; из этого следует, что большие основные версии плохие . К сожалению, отдел маркетинга любит большие числа.)
zwol
1
@Philipp - легко найти карту от номера версии до маркетинговых названий, например, здесь
davidbak
18

системная информация

получает много полезной информации, такой как операционная система, тип системы (32/64 бит) и так далее:

введите описание изображения здесь

пижон
источник
Да, я бы systeminfoтоже порекомендовал . Как видно из приведенного выше изображения, на нем будет отображаться ваша операционная система, а также другая информация, которая может вам понадобиться.
Мэтью
3
Спасибо за быстрый ответ. systeminfoна самом деле дает информацию, которую я ищу (следовательно, upvote), но это занимает довольно много времени (на моем ПК это занимает более 15 секунд). Поэтому я выбрал wmicрешение, найденное в следующем ответе.
Доминик
1
Это то, что я прошу людей запускать, когда мне нужно выяснить ОС / версию, на которой они работают:cmd /c systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
Андрей Савиных,
1
Вывод systeminfo зависит от языка, поэтому совершенно бесполезен, если вы не хотите запускать его в большем масштабе
Stephan
1

У меня нет опыта работы с InstallAnywhere, но есть два варианта, чтобы увидеть, какая ОС установлена ​​с помощью командной строки.

  1. Использование Cmd

    systeminfo.exe
    

    Используя команду systeminfo.exe, вы можете увидеть результат под полем OS Name. Это может дать вам больше информации, чем вам требуется.

    Дополнительную информацию об этой команде можно найти в Microsoft TechNet .

  2. Powershell

    В качестве альтернативы вы можете использовать следующий скрипт Powershell, который будет возвращать точную информацию, которую вы хотите.

    Get-CimInstance Win32_OperatingSystem | Select-Object  Caption | ForEach{ $_.Caption }
    
Тим Мэхэстис
источник