Jak ustalić, czy mój system to Windows 10, używając wiersza polecenia? [duplikować]

32

Pracuję z InstallAnywhere, starym programem do tworzenia instalatorów. Chciałbym zainstalować konkretny plik, tylko w przypadku Windows XP i Windows Vista.

Ze względu na ograniczenia InstallAnywhere nie jest to możliwe. Mogę zdecydować o usunięciu pliku, który został już zainstalowany, na podstawie reguły.

W ramach tej reguły mogę sprawdzić platformę, na której działam, co daje mi możliwość sprawdzenia w systemie Windows XP, Windows Vista, Windows 7 itd., Ale nie w przypadku systemu Windows 10. Nie mogę powiedzieć „Wykonaj to akcja, gdy system nie jest XP lub Vista ”, więc muszę powiedzieć„ Wykonaj tę akcję na wszystkich platformach, które nie są XP ani Vista ”.

Mogę jednak uruchamiać polecenia wiersza polecenia i wychwytywać wynik, więc oto moje pytanie: czy istnieje polecenie, którego mogę użyć do ustalenia, czy pracuję w systemie Windows 10?

Dominique
źródło
winverpojawi się okno dialogowe Windows - informacje, jeśli zostanie wpisane w cmd lub Start. Czy to zadziała? Alternatywnie - stackoverflow.com/questions/1792740/...
Tetsujin
Dzięki za odpowiedź, ale szukam polecenia wiersza polecenia, które daje odpowiedź w wierszu polecenia, nie mogę użyć informacji w sposób wsadowy, gdy pojawi się okno komunikatu.
Dominique,
Sprawdź wersję cmd.exe, jest to najłatwiejsza i obsługiwana przynajmniej od XP. Jest na to pytanie.
KeyWeeUsr
2
wersje google cmd, każdy system operacyjny ma inny numer wersji, możesz to sprawdzić i nie potrzebujesz niepotrzebnego długiego skryptu lub innego programu - tutaj
KeyWeeUsr
5
Po prostu wpisz ver. Na przykład w moim systemie Windows 7 pojawia się „Microsoft Windows [wersja 6.1.7601]”, który mówi mi, że korzystam z systemu Windows 7 (który ma wersję 6.1 ).
Andreas Rejbrand,

Odpowiedzi:

54

Czy istnieje polecenie określające, czy pracuję w systemie Windows 10?

Możesz użyć wmic.

Następujące polecenie zwróci wersję systemu Windows.

wmic os get Caption | findstr /v Caption

Przykładowe dane wyjściowe:

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

Jeśli chcesz trochę więcej informacji, możesz użyć następującego pliku wsadowego (GetOS.cmd), który pobierze i wyświetli:

  • Wersja systemu operacyjnego
  • Wersja główna dodatku Service Pack
  • Architektura (64 lub 32 bity)
@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

Wersja systemu operacyjnego jest przechowywana w %_os, Service Pack Wersja główna jest przechowywana w %_sp%, a architektura jest przechowywana w %_bits%.

Uwagi:

  • Nie do końca przetestowane, ponieważ nie mam wszystkich kombinacji systemu operacyjnego i dodatku Service Pack do przetestowania.

  • forPolecenie pobiera tylko w 3. części (Token) systemu operacyjnego. Działa to w przypadku wersji na komputery stacjonarne (jeśli chcesz odróżnić Server 2008 od innych wersji, musisz znaleźć inne rozwiązanie).

  • %_oszostanie ustawiony na jedną z następujących wartości: Server, Vista, 7, 8, 8.1lub 10.

Przykładowe dane wyjściowe:

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

F:\test>

Dalsza lektura

DavidPostill
źródło
2
Po kilku testach zdecydowałem się użyć następującego polecenia:wmic os get Caption | findstr /V Caption
Dominique
@DavidPostill Przetestowałem plik wsadowy. Myślę, że potrzebuje pauseprzed, endlocalaby dać użytkownikowi szansę odczytania wyniku przed zamknięciem okna. Czy to też dotyczy Ciebie?
Matthew
1
@Matthew Myślę, że oczekuje się, że jakiś inny system uruchomi plik wsadowy i przechwyci jego dane wyjściowe (lub zostanie wywołany ręcznie z istniejącego okna wiersza polecenia).
TripeHound
Wstrzymanie @mathew nie jest konieczne uruchamianie z wiersza polecenia cmd. Odpowiedzią jest raczej pokazanie techniki niż pasowanie do wszystkich scenariuszy.
DavidPostill
1
@mathew otwórz wiersz polecenia cmd, w którym zapisałeś plik, i wpisz getos
DavidPostill
35

Nie mogę w to uwierzyć tak długo i nie mam komendy ver

C:\>ver

Microsoft Windows [Version 10.0.10586]

C:\>

Działa w przekierowaniach, więc możesz to zrobić

ver | find "Version 10."

Ale zwykle powinieneś pisać „dla tej i wszystkich przyszłych wersji”, więc lepiej wyliczyć poprzednie.

Jozuego
źródło
FYI verma nie pracować w PowerShell. To jest CMDspecyficzne.
Keltari
3
@Keltari But iex "ver"does!
Ben N
Wyniki vermogą być nieco mylące. Na maszynie, w której teraz siedzę, wraca Microsoft Windows [Version 6.1.7601]. Ale jestem pewien, że działa pod Windows 7, a nie Windows 6.
Philipp
@Philipp Tak, Windows 7 i 8 to „naprawdę” wydania poprawek odpowiednio dla systemów Vista, 6.1 i 6.2; głównym problemem jest wersja ściśle marketingowa. Nie wiem, czy zmiany w systemie Windows 10 są na tyle znaczące, aby uzasadnić poważny bump wersji. (Z twardego punktu widzenia inżynierii oprogramowania, główna wersja jakiegokolwiek oprogramowania powinna zostać podbita tylko w celu wskazania przerwy w kompatybilności wstecznej; wynika z tego, że duże główne wersje są złe . Niestety dział marketingu lubi duże liczby.)
zwolnienie
1
@Philipp - łatwo jest znaleźć mapę od numeru wersji do nazw marketingowych, np. Tutaj
davidbak
18

Informacja o systemie

pobiera wiele przydatnych informacji, takich jak system operacyjny, typ systemu (32/64 bit) i tak długo:

wprowadź opis zdjęcia tutaj

koleś
źródło
Tak, poleciłbym systeminforównież. Jak widać na powyższym obrazku, wyświetli on system operacyjny oraz inne informacje, których możesz potrzebować.
Matthew
3
Dziękuję za szybką odpowiedź. systeminfofaktycznie zawiera informacje, których szukam (stąd opinia), ale zajmuje to trochę czasu (na moim komputerze zajmuje to ponad 15 sekund). Dlatego wybrałem wmicrozwiązanie, które znalazłem w następnej odpowiedzi.
Dominique,
1
To jest to, o co proszę ludzi, aby uruchomili, gdy muszę dowiedzieć się, na jakiej wersji systemu operacyjnego / OS używają:cmd /c systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
Andrew Savinykh,
1
Dane wyjściowe systeminfo zależą od języka, więc jest zupełnie bezużyteczne, jeśli chcesz go uruchomić na większą skalę
Stephan
1

Nie mam doświadczenia z InstallAnywhere, ale istnieją dwie opcje, aby zobaczyć, jaki system operacyjny jest zainstalowany za pomocą wiersza polecenia.

  1. Korzystanie z Cmd

    systeminfo.exe
    

    Za pomocą polecenia systeminfo.exemożesz zobaczyć wynik pod polem OS Name. Może to dać więcej informacji, niż potrzebujesz.

    Więcej informacji na temat tego polecenia można znaleźć w witrynie Microsoft TechNet .

  2. PowerShell

    Alternatywnie możesz użyć następującego skryptu Powershell, który zwróci dokładne informacje, których potrzebujesz.

    Get-CimInstance Win32_OperatingSystem | Select-Object  Caption | ForEach{ $_.Caption }
    
Tim Mahood
źródło