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.
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 6.1." > nul if %errorlevel%==0 set $VERSIONWINDOWS=Windows 7 ver | find /i "version 6.0." > nul if %errorlevel%==0 set $VERSIONWINDOWS=Windows Vista 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: http://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 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 :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 http://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
Auteur : Mr Xhark
Fondateur du blog et passionné par les technologies je partage mes découvertes quotidiennement.









Déjà 14 commentaires
Twitter: minil00p
dit :
22 janvier 2009 à 9h45
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 :
find: /i: No such file or directory
find: version 6.0.: No such file or directory
Le processus a tenté d’écrire sur un canal inexistant.
find: /i: No such file or directory
find: version 5.1.: No such file or directory
Le processus a tenté d’écrire sur un canal inexistant.
[...]
OS :
22 janvier 2009 à 10h32
@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 ?
Twitter: minil00p
dit :
22 janvier 2009 à 10h45
J’avais fait un copié/collé, mais en téléchargeant le script, ça fait la même chose.
Mon ver retourne ceci :
C:\Documents and Settings\bcolin>ver
Microsoft Windows XP [version 5.1.2600]
Twitter: minil00p
dit :
22 janvier 2009 à 10h47
Voici également la version de mon find :
C:\Documents and Settings\bcolin>find –version
GNU find version 4.1
22 janvier 2009 à 11h30
@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 :
Twitter: minil00p
dit :
22 janvier 2009 à 12h00
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:\WINDOWS\system32\find /i « version 6.0. » > nul
Encore merci !
22 janvier 2009 à 18h09
Pas de souci
8 août 2009 à 17h47
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
28 mai 2010 à 17h04
Pour Win7, c’est « 6.1. »
28 mai 2010 à 21h24
@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
7 juin 2010 à 18h07
Bon script,
pour Windows ME c’est bien « >Windows ME » ??
je n’ai pas de ME sous la main pour vérifier.
@+
20 juillet 2010 à 8h22
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 :
ver | find /i « Windows 98″ > nul
if %errorlevel%==0 goto win98
provoque une erreur et doit être remplacé par :
VER | find « XP » > nul
IF not errorlevel 1 GOTO Win_xp
VER | find « 98″ > nul
IF not errorlevel 1 GOTO Win_98
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.
20 juillet 2010 à 8h33
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 :
@echo off
VER | find « XP » > nul
IF not errorlevel 1 GOTO Win_xp
VER | find « 98″ > nul
IF not errorlevel 1 GOTO Win_98
goto no-found
:Win_xp
echo windows XP detecte: rmdir utilise.
if exist bonjour rmdir /s /q %1%
goto fin
:Win_98
echo windows 98 detecte: deltree utilise.
if exist bonjour deltree /y %1%
goto fin
:no-found
echo problème win 3.1 linux ou xp64 ne fonctionnent pas avec ce batch
pause
goto fin
:fin
pause
cls
20 juillet 2010 à 8h52
Mille Excuses !! nom d’une pipe en bois !
le script précédant n’était qu’une version alpha…
Celui-ci est mieux :
@echo off
VER | find « XP » > nul
IF not errorlevel 1 GOTO Win_xp
VER | find « 98″ > nul
IF not errorlevel 1 GOTO Win_98
goto no-found
:Win_xp
echo Windows XP détecté: commande rmdir utilisée.
rmdir /s /q %1%
goto fin
:Win_98
echo Windows 98 détecté: commande deltree utilisée.
deltree /y %1%
goto fin
:no-found
echo problème win 3.1 Linux ou XP64 ne fonctionnent pas avec ce batch.
pause
goto fin
:fin
echo Pressez une touche pour quitter…
pause >nul
cls
————————
p.s : pour pouvoir écrire les accents dans un script batch, utilisez edit, depuis la console.