web-dev-qa-db-fra.com

comment savoir sur quelle version de Windows et/ou de cmd.exe un fichier de commandes est en cours d'exécution?

Comment déterminer sur quelle version de Windows et/ou cmd.exe un fichier de commandes est exécuté?

Il n'y a pas de cmd /version que j'ai pu trouver et les résultats de SET dans une session d'invite de commande ne donnent rien d'évidentement unique (entre XP et Win7 de toute façon).

14
matt wilkie

La version de cmd.exe devrait est en réalité plutôt dénuée de pertinence, sauf si vous essayez d'utiliser des fonctionnalités qui n'existaient pas auparavant (dans command.com par exemple). Il y a le pseudovariable

%cmdextversion%

qui contient la version des extensions de commande qui est 2 depuis des lustres (au moins de nouveau à NT 4, iirc).

Mais revenons au fait: Exécuter ver et analyser la chaîne de version pourrait être votre meilleur choix:

for /f "tokens=2 delims=[]" %%x in ('ver') do set WINVER=%%x
set WINVER=%WINVER:Version =%
7
Joey

vous pouvez utiliser le "systeminfo" @ cmd.exe

C:\Users\Tagon8>systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
OS Name:                   Microsoft Windows 8 Release Preview
OS Version:                6.2.8400 N/A Build 8400
15
Dg Jacquard

J'ai trouvé un moyen plus court en utilisant ver aussi:

Pourrait être encore plus court:

ver | find "5.1" >nul && goto ver_winxp
8
user3588338

J'ai trouvé un moyen plus court en utilisant ver également:

...
ver | find "5.1"
if %ERRORLEVEL% == 0 goto ver_winxp
...

Cela va trouver XP, remplacez la chaîne par vos versions souhaitées 

4
Olix

Tapez "ver" à l'invite de commande.

La prochaine fois, étant donné que ce n'est pas vraiment lié à la programmation mais au serveur ou à l'utilisateur, vous pouvez essayer serverfault.com ou superuser.com.

2
Dean J

Quelqu'un aura peut-être besoin de ce qui suit pour déterminer le SKU (Win7). J'utilise une partie de ce script pour sélectionner le système d'exploitation et le code XML appropriés pendant l'exécution de sysprep. J'espère que cela vous aidera!

@echo off

set ver=Unknown

systeminfo > C:\sysinfo

findstr /e /c:"Enterprise " C:\sysinfo 1>nul 2>nul    
if %errorlevel% equ 0 set ver=Enterprise

findstr /e /c:"Ultimate " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Ultimate

findstr /e /c:"Professional " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Professional

findstr /e /c:"Home Premium " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Home Premium

findstr /e /c:"Home Basic " C:\sysinfo 1>nul 2>nul
if %errorlevel% equ 0 set ver=Home Basic    

del /f /q C:\SP\sysinfo 1>nul 2>nul
Echo Windows 7 %ver%

pause    
exit
1
Alex Ureche

La commande interne ver indique le numéro de version de Windows (ce qui aurait pu être appris en tapant help à l'invite de commande).

Il existe une variable dynamique%CMDEXTVERSION%, mais elle n’a pas progressé dans plusieurs versions; elle n’est donc utile que pour délimiter entre Windows NT et Windows 2000 et les versions plus récentes . (Merci @Joey, ici .)

Voici un lot pour analyser la sortie de ver pour XP et plus récent, avec l'aimable autorisation de Simon Sheppard :

@echo off
Setlocal
:: Get windows Version numbers
For /f "tokens=2 delims=[]" %%G in ('ver') Do (set _version=%%G) 

For /f "tokens=2,3,4 delims=. " %%G in ('echo %_version%') Do (set _major=%%G& set _minor=%%H& set _build=%%I) 

Echo Major version: %_major%  Minor Version: %_minor%.%_build%

if "%_major%"=="5" goto sub5
if "%_major%"=="6" goto sub6

Echo unsupported version
goto:eof

:sub5
::Winxp or 2003
if "%_minor%"=="2" goto sub_2003
Echo Windows XP [%PROCESSOR_ARCHITECTURE%]
goto:eof

:sub_2003
Echo Windows 2003 or xp 64 bit [%PROCESSOR_ARCHITECTURE%]
goto:eof

:sub6
if "%_minor%"=="1" goto sub7
Echo Windows Vista or Windows 2008 [%PROCESSOR_ARCHITECTURE%]
goto:eof

:sub7
Echo Windows 7 or Windows 2008 R2 [%PROCESSOR_ARCHITECTURE%]
goto:eof

Et voici mon coup de poing assez complet, essentiellement académique, qui renvoie le numéro de version analysé sous forme de variables d'environnement:

@echo off
setlocal
:: from http://ss64.org/viewtopic.php?pid=3136#p3136
::==================================
::variables
if %PROCESSOR_ARCHITECTURE%==x86   set pro_Arch=32 Bit (x86)
if %PROCESSOR_ARCHITECTURE%==AMD64 set pro_Arch=64 Bit (AMD64)
if %PROCESSOR_ARCHITECTURE%==IA64 set pro_Arch=Itanium 64 Bit (IA64)

:Main
    call :clean
    for /f "tokens=2 delims=[]" %%x in ('ver') do set cmdver=%%x
    set cmdver=%cmdver:Version =%
    call :parse_cmdver
    call :ver%cmdver%
    call :Report
    goto :End


:clean
    :: Ensure we don't inherit values from previous runs
    set _verCmd=
    set _verMajor=
    set _verMinor=
    set _verBuild=
    set _verWin=
    goto :eof

:Parse_cmdver
    :: Turn "5.1.2306" string into actionable variables
    for /f "tokens=1,2,3* delims=." %%g in ("%cmdver%") do (
        set major=%%g
        set minor=%%h
        set build=%%i
        )
    goto :eof

:Report
    echo.
    echo.   CMD version is %cmdver%
    echo.   which probably means %longver% %pro_Arch%
    echo.
    goto :eof

:Report2
    echo.   The numbers are stored in the following variables:
    echo.
    set _ver
    goto :eof


::Table of version numbers built from 
:: http://en.wikipedia.org/wiki/Microsoft_Windows#Timeline_of_releases
:ver1.01
    set longver=Windows 1.01
    set shortver=Win101
    goto :eof

:ver2.03
    set longver=Windows 2.03
    set shortver=Win203
    goto :eof

:ver2.10
    set longver=Windows 2.10
    set shortver=Win21
    goto :eof

:ver2.11
    set longver=Windows 2.11
    set shortver=Win211
    goto :eof

:ver3.0
    set longver=Windows 3.0
    set shortver=Win3
    goto :eof

:ver3.1
    set longver=Windows 3.1, Windows For Workgroups 3.1, or Windows NT 3.1
    set shortver=Win31/WFW31/WinNT31
    goto :eof

:ver3.11
    set longver=Windows For Workgroups 3.11
    set shortver=WFW311
    goto :eof

:ver3.2
    set longver=Windows 3.2 (released in Simplified Chinese only)
    set shortver=Win32ch
    goto :eof

:ver3.5
    set longver=Windows NT 3.5
    set shortver=WinNT35
    goto :eof

:ver3.51
    set longver=Windows NT 3.51
    set shortver=WinNT351
    goto :eof

:ver4.0.950
    set longver=Windows 95
    set shortver=Win95
    goto :eof

:ver4.0.1381
    set longver=Windows NT 4.0
    set shortver=WinNT4
    goto :eof

:ver4.90.3000
    set longver=Windows Me
    set shortver=WinMe
    goto :eof

:ver4.10.1998
    set longver=Windows 98
    set shortver=Win98
    goto :eof

:ver4.10.2222
    set longver=Windows 98 SE
    set shortver=Win98SE
    goto :eof

:ver5.0.2195
    set longver=Windows 2000
    set shortver=Win2K
    goto :eof

:ver5.1.2600
    set longver=Windows XP or Windows Fundamentals for Legacy PCs
    set shortver=WinXP/WinFun
    goto :eof

:ver5.2.3790
    set longver=Windows XP, Windows XP Pro or Windows Server 2003
    set shortver=WinXP/WinXP-Pro/Server2003
    goto :eof

:ver5.2.4500
    set longver=Windows Home Server
    set shortver=WinHomeServer
    goto :eof

:ver6.0.6002
    set longver=Windows Vista or Windows Server 2008
    set shortver=Vista/Server2008
    goto :eof

:ver6.1.7600
    set longver=Windows 7 or Windows Server 2008 R2
    set shortver=Win7/Server2008R2
    goto :eof


:End
:: return version to calling Shell/script,
:: see http://ss64.com/nt/syntax-functions.html
endlocal & set _verCmd=%cmdver% & set _verMajor=%major% & set _verMinor=%minor% & set _verBuild=%build% & set _verWin=%shortver%
call :Report2 :: comment this line out to suppress extra reporting
0
matt wilkie

Pour trouver la version Windows en utilisant WMIC, vous pouvez utiliser:

wmic os get version
0
Pedro Lobito