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
MàJ : voici une version plus moderne en powershell pour Windows 10 et Windows 11
18 commentaires
Hello !
Merci pour ce script
Sur mon XP, ça ne fonctionne pas, ça génére des messages d'erreur et se termine par une variable %VERSIONWINDOWS% vide :
@Benoit : tu as téléchargé le .bat ou fait un copier/coller du code dans le billet ?
Que renvoit la commande
sous l'invite de commande ?
J'avais fait un copié/collé, mais en téléchargeant le script, ça fait la même chose.
Mon ver retourne ceci :
Voici également la version de mon find :
@Benoit : tu as du installer quelque chose qui prend la main sur la fonction "find" d'origine de Windows, vu ce que te retourne find ! Windows est loin d'être en version GNU 🙂
Il semblerait que ce soit Gnu32 ?
Voilà ce que me retourne Windows XP si je rentre la même chose que toi :
Rhô ! Bien vu... J'aurais dû le voir moi-même, désolé de t'avoir embêté... J'ai récupéré un poste pas standard de quelqu'un, je suis au boulot. Il y a dû s'installer un émulateur de bash unix...
Ton script fonctionne parfaitement, il m'a suffit de faire un appel en dur au find windows:
ver | C:WINDOWSsystem32find /i "version 6.0." > nul
Encore merci !
Pas de souci 😉
merci à tous de donner des infos sur ce probleme. moi je viens vers vous car je voudrais savoir comment on peut detecter la version win xp home ou pro avec un script bat car je met au point un bat qui execute des choses mais celles ci ne sont pas indentiques d'un xp home à un pro...
j'espére que tout le monde comprent bien ce que je veux faire.
cordialement
Pour Win7, c'est "6.1." 😉
@nanard37 : je pense que cette valeur est stockée dans le registre, tu dois pouvoir lire une clé. Reste à trouver laquelle
@Gobiel : je viens de mettre à jour
Bon script,
pour Windows ME c'est bien ">Windows ME" ??
je n'ai pas de ME sous la main pour vérifier.
@+
Bonjour et merci pour ce script batch.
Mais l'as-tu testé sur Windows 98 ?
sur mon PC avec Win 98 SE, il ne marche pas :
provoque une erreur et doit être remplacé par :
Ceci a l'avantage de fonctionner à la fois sur Win98 et sur WinXP.
Pour afficher votre version du Syst-Exploit :
@echo off
@echo Vous etes sous :
@ver
p.s : voilà, j'espère que cette info sera utile. 🙂
Application pratique de ce script batch: faire un script qui efface les dossiers. La commande batch sous Win98 est "deltree" , tandis que la commande batch sous WinXP est rmdir. (avec leurs arguments respectifs).
Il est donc vital de détecter le SE (Système d'Exploitation) afin d'exécuter la bonne commande.
Voici un exemple de script, que vous pouvez compléter pour qu'il détecte davantage de SE si vous le souhaitez.
Le nom du dossier à effacer doit être passé en variable:
Donc, sauvegardez le script sous "Effaceur.bat" par exemple,
puis créez un dossier bidon nommé "photos_de_vacances".
Ouvrez la console ms-dos, puis tapez :
effaceur.bat photos_de_vacances
Le nom de dossier passe dans la variable %1%,
tout simplement. Voici le script :
Mille Excuses !! nom d'une pipe en bois !
le script précédant n'était qu'une version alpha...
Celui-ci est mieux :
------------------------
p.s : pour pouvoir écrire les accents dans un script batch, utilisez edit, depuis la console. 😉
voilà je crois un truc manquant dans le patch
ver | find /i "version 6.2." > nul
if %errorlevel%==0 set $VERSIONWINDOWS=Windows 8
J’ai utilisé le script « Diriger l'exécution dans un label suivant l'OS » et j’ai un problème avec Windows XP (WES2009) :
- La redirection de l‘erreur > nul (Ok sous Win10, mais plantage sous WinXP)
- La redirection de l‘erreur > null (plantage sous Win10, et Ok sous Win XP)
REM Fonctionne sous Windows XP
ver | find /i "version 5.1." > null && if %errorlevel%==0 goto datewinxp
ver | find /i "version 10.0." > null && if %errorlevel%==0 goto datewinten
REM Fonctionne sous Windows 10
REM ver | find /i "version 5.1." > nul && if %errorlevel%==0 goto datewinxp
REM ver | find /i "version 10.0." > nul && if %errorlevel%==0 goto datewinten
Avez-vous une solution à mon problème ? Par avance, merci.
Question/Réponse :
Ca fonctionne sur Win10 et WinXP avec ceci (null et retour à la ligne pour errorlevel) :
ver | find /i "version 5.1." > null
if %errorlevel%==0 goto winxp
ver | find /i "version 10.0." > null
if %errorlevel%==0 goto winten