(modifié le 10 septembre 2023 à 1:27)

Si vous utilisez des scripts batchs au sein de votre réseau de PC, il peut être utile suivant la version de Windows d'agir différemment. En effet, une fonction système qui fonctionne sur Windows XP peut ne pas fonctionner sur Windows 98 (et vice-versa).

Aussi étonnant que cela puisse paraître il n'existe pas de variable d'environnement permettant de récupérer cette information sur la version ! Seule la variable %OS% est définie mais ne permet pas différencier les différents OS bâtis sur les noyaux NT (tels que 2003, 2000, XP), de plus elle n'est pas présente sur tous les OS Microsoft.

Je vous propose donc une solution que j'ai du mettre en place dans le cadre d'un script qui, je l'espère, vous servira à votre tour.

La liste des versions de Windows NT est disponible sur Wikipedia (version list).

Récupérer la version de l'OS dans une variable :

@echo off
cls
color 5F
REM Detection de l'OS (source blogmotion.fr)
ver | find /i "version 10.0." > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 10 Insider Preview
ver | find /i "version 10.0.100" > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 10 Technical Preview
ver | find /i "version 10.0.10586" > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 10 Threshold 2
ver | find /i "version 10.0.10240" > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 10 Threshold 1
ver | find /i "version 6.4." > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 10 Technical Preview
ver | find /i "version 6.3." > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 8.1-2012R2
ver | find /i "version 6.2." > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 8-2012
ver | find /i "version 6.1." > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 7-2008R2
ver | find /i "version 6.0." > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows Vista-2008
ver | find /i "version 5.1." > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows XP
ver | find /i "version 5.2." > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 2003
ver | find /i "Windows 2000" > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 2000
ver | find /i "Windows NT" > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows NT
ver | find /i ">Windows ME" > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows ME
ver | find /i "Windows 98" > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 98
ver | find /i "Windows 95" > nul && if %errorlevel%==0 set $VERSIONWINDOWS=Windows 95

echo OS : %$VERSIONWINDOWS%
echo.(source du script: https://blogmotion.fr)
echo.

Voila le résultat du script (vous devinerez à partir de quel OS je l'ai lancé) :

Diriger l'exécution dans un label suivant l'OS :

@echo off
ver | find /i "version 10.0.1" > nul && if %errorlevel%==0 goto winten
ver | find /i "version 6.4." > nul && if %errorlevel%==0 goto winten
ver | find /i "version 6.3." > nul && if %errorlevel%==0 goto winheightone
ver | find /i "version 6.2." > nul && if %errorlevel%==0 goto winheight
ver | find /i "version 6.1." > nul && if %errorlevel%==0 goto winseven
ver | find /i "version 6.0." > nul && if %errorlevel%==0 goto winvista
ver | find /i "version 5.1." > nul && if %errorlevel%==0 goto winxp
ver | find /i "version 5.2." > nul && if %errorlevel%==0 goto win2003
ver | find /i "Windows 2000" > nul && if %errorlevel%==0 goto win2000
ver | find /i "Windows NT" > nul && if %errorlevel%==0 goto winnt
ver | find /i ">Windows ME" > nul && if %errorlevel%==0 goto winme
ver | find /i "Windows 98" > nul && if %errorlevel%==0 goto win98
ver | find /i "Windows 95" > nul && if %errorlevel%==0 gotowin95

:winten
REM Entrez ici vos commandes
goto end

:winheightone
REM Entrez ici vos commandes
goto end

:winheight
REM Entrez ici vos commandes
goto end

:winseven
REM Entrez ici vos commandes
goto end

:winvista
REM Entrez ici vos commandes
goto end

:winxp
REM Entrez ici vos commandes
goto end

:win2003
REM Entrez ici vos commandes
goto end

:win2000
REM Entrez ici vos commandes
goto end

:winnt
REM Entrez ici vos commandes
goto end

:winme
REM Entrez ici vos commandes
goto end

:win98
REM Entrez ici vos commandes
goto end

:win95
REM Entrez ici vos commandes
goto end

:end
echo.Fin du programme (source https://blogmotion.fr)
echo.

N'hésitez pas à adapter le script à vos besoins et à me transmettre d'éventuelles améliorations 😉

Télécharger le script qui récupère la version de l'OS en variable
Télécharger le script qui dirige l'éxecution dans un label suivant l'OS

Version plus moderne (de Vista à 10)

:: ----- Load the system values ----- 
:getValues 
for /f "tokens=4 delims=[] " %%a in ('ver') do set version=%%a 
 
:: Windows Vista 
if %version% EQU 6.0.6000 set name=Microsoft Windows Vista & set allow=1 
if %version% EQU 6.0.6001 set name=Microsoft Windows Vista SP1 & set allow=1 
if %version% EQU 6.0.6002 set name=Microsoft Windows Vista SP2 & set allow=1 
:: Windows 7 
if %version% EQU 6.1.7600 set name=Microsoft Windows 7 & set allow=1 
if %version% EQU 6.1.7601 set name=Microsoft Windows 7 SP1 & set allow=1 
:: Windows 8 
if %version% EQU 6.2.9200 set name=Microsoft Windows 8 & set allow=1 
if %version% EQU 6.3.9200 set name=Microsoft Windows 8.1 & set allow=1 
if %version% EQU 6.3.9600 set name=Microsoft Windows 8.1 Update 1 & set allow=1 
:: Windows 10 Technical Preview 
if %version% EQU 6.4.9841 set name=Microsoft Windows 10 Technical Preview 1 & set allow=1 
if %version% EQU 6.4.9860 set name=Microsoft Windows 10 Technical Preview 2 & set allow=1 
if %version% EQU 6.4.9879 set name=Microsoft Windows 10 Technical Preview 3 & set allow=1 
if %version% EQU 10.0.9926 set name=Microsoft Windows 10 Technical Preview 4 & set allow=1 
if %version% EQU 10.0.10041 set name=Microsoft Windows 10 Technical Preview 5 & set allow=1 
if %version% EQU 10.0.10049 set name=Microsoft Windows 10 Technical Preview 6 & set allow=1 
:: Windows 10 Insider Preview 
if %version% EQU 10.0.10166 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.10525 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.10565 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.11082 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.11099 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.11102 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.14251 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.14257 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.14267 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.14271 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.14279 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.14283 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.14291 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.14295 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.14316 set name=Microsoft Windows 10 Insider Preview & set allow=1 
if %version% EQU 10.0.14332 set name=Microsoft Windows 10 Insider Preview & set allow=1 
:: Windows 10 RTM 
if %version% EQU 10.0.10240 set name=Microsoft Windows 10 Threshold 1 & set allow=1 
if %version% EQU 10.0.10586 set name=Microsoft Windows 10 Threshold 2 & set allow=1 
 
if %allow% EQU 1 goto permission 
 
call :print Sorry, this Operative System is not compatible with this tool. 
 
pause 
goto :Eof

source

MàJ : voici une version plus moderne en powershell pour Windows 10 et Windows 11

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter