32

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

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

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

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

4 ответа4

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>

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

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • findstr - поиск строк в файлах.
  • for /f - Циклическая команда против результатов другой команды.
  • if - Условно выполнить команду.
  • wmic - команда инструментария управления Windows.
36

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

C:\>ver

Microsoft Windows [Version 10.0.10586]

C:\>

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

ver | find "Version 10."

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

18

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

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

1

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

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

    systeminfo.exe
    

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

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

  2. Powershell

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

    Get-CimInstance Win32_OperatingSystem | Select-Object  Caption | ForEach{ $_.Caption }
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .