Script pour Vérifier la version d'un .exe
Résolu/Fermébarnabe0057 Messages postés 14454 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 30 novembre 2024 - 18 juin 2023 à 13:22
- Script pour Vérifier la version d'un .exe
- Script vidéo youtube - Guide
- Verifier un lien - Guide
- Dernière version ccleaner gratuit français - Télécharger - Nettoyage
- Splitcam ancienne version - Télécharger - Messagerie
- .Exe - Télécharger - Divers Utilitaires
4 réponses
Modifié le 4 juin 2023 à 12:00
Bonjour,
Personnellement j'aurais fait plutôt comme ça :
@echo off set "app=%programfiles%\veyon\veyon-cli.exe" if not exist "%app%" (exit /b 1) call :CHECK "4.7.3.0" || ( "%~dp0veyon-4.7.3.0-win64-setup.exe" /S /NoMaster /NoStartMenuFolder /ApplyConfig=%~dp0configuration_pceleve.json "%app%" authkeys import master/public %~dp0master_public_key.pem "%app%" authkeys import master/private %~dp0master_private_key.pem ) pause exit :CHECK set "version=" for /f "skip=2 delims=" %%A in ('"wmic datafile where name='%app:\=\\%' get version /format:list"') do if not defined version set %%A ) echo Version installée : %version% if "%version%"==%1 (exit /b 0) else (exit /b 1)
4 juin 2023 à 13:06
merci beaucoup. cette methode marche bien en effet c'est une autre manière d'y arriver et c'est plus épuré !!
Voici ce que j'avais conçu en m'inspirant d'autres forum qui consiste à appeler des commandes pour changer \ en \\ puis chercher la version de l'appli et enfin la comparer à ce que je veux installer.
@echo off
Set "Application=C:\Program Files\veyon\veyon-cli.exe"
Call :Add_backSlash "%Application%"
Call :GetVersion %Application% Version
echo La version de l'application est : %Version%
if "%Version%" EQU "4.7.3.0" goto END else goto CONTINUE
:CONTINUE
"\\srv-dc1\applications$\veyon\veyon-4.7.3.0-win64-setup.exe" /S /NoMaster /NoStartMenuFolder /ApplyConfig=\\srv-dc1\applications$\veyon\configuration_pceleve.json
"C:\Program Files\veyon\veyon-cli.exe" authkeys import master/public \\srv-dc1\applications$\veyon\master_public_key.pem
"C:\Program Files\veyon\veyon-cli.exe" authkeys import master/private \\srv-dc1\applications$\veyon\master_private_key.pem
exit
:END
exit
:GetVersion <ApplicationPath> <Version>
FOR /F "tokens=2 delims==" %%I IN (
'wmic datafile where "name='%~1'" get version /format:Textvaluelist'
) DO FOR /F "delims=" %%A IN ("%%I") DO SET "%2=%%A"
Exit /b
:Add_backSlash <String>
Set "Application=%1"
Set "String=\"
Set "NewString=\\"
Call Set "Application=%%Application:%String%=%NewString%%%"
Exit /b
17 juin 2023 à 01:53
salut. En fait je me rend compte que le script proposé ne se lance pas. N'y a t il pas une erreur dans les commande? le pause suivi de exit est il normal? et la parenthèse ligne 19?
j'avais cru que c'était ok ce format condensé mais là il fonctionne plus et je suis pas sur de comprendre ce qu'il fait.
if not exist %app% (exit /b 1) >> pourquoi quitter le script si le logiciel n'existe pas. il faudrait plutôt lancer les commandes d'installation dans ce ca, non?
Pourquoi y a til un call :CHECK et un :CHECK ? Quelle difference entre les 2?
merci
Modifié le 17 juin 2023 à 06:39
Le "pause" suivi du "exit" n'est pas nécessaire, il est utile uniquement lors des tests.
Effectivement c'est un oubli de ma part, le "if not exist" devrait lancer les commandes d'installation.
:CHECK est une fonction et call :CHECK c'est l'appel à la fonction
.
Si je corrige vite fait mon code ça devrait donner quelque chose comme ça :
@echo off set "app=%programfiles%\veyon\veyon-cli.exe" if not exist "%app%" (call :INSTALL) call :CHECK "4.7.3.0" || call :INSTALL exit :CHECK set "version=" for /f "skip=2 delims=" %%A in ('"wmic datafile where name='%app:\=\\%' get version /format:list"') do if not defined version set %%A echo Version installée : %version% if "%version%"==%1 (exit /b 0) else (exit /b 1) :INSTALL "%~dp0veyon-4.7.3.0-win64-setup.exe" /S /NoMaster /NoStartMenuFolder /ApplyConfig=%~dp0configuration_pceleve.json "%app%" authkeys import master/public %~dp0master_public_key.pem "%app%" authkeys import master/private %~dp0master_private_key.pem goto :eof
17 juin 2023 à 06:37
Ce script est valable pour l'installation d'un seul logiciel, mais si tu as plusieurs logiciels à installer j'ai un autre script mieux adapté.
17 juin 2023 à 19:26
cela fonctionne bien désormais , c'est nickel merci. Juste pour etre sur, ce batch ne prend pas en compte la hierarchie des versions c'est bien ça? C'est a dire que si dans mon check j'indique une version 2.1.3 mais que sur le poste il ya une version plus récente type 2.2.0, alors il va rétrograder vers la version indiquée = 2.1.3. Et bien sur idem si la version est plus ancienne.
J'ai en effet plusieurs programme à installer via GPO, quelle est ta méthode dans cette situation? Car pour l'instant je fais 1GPO par logiciel, c'est à la fois pas pratique mais ca peut aussi etre utile pour les classer
Modifié le 18 juin 2023 à 13:22
Non ce batch ne prend pas en compte la hiérarchie des versions.
.
Voilà une autre version plus pointue qui permet d'installer plusieurs applications (3 en l'occurrence mais on peut en rajouter autant qu'on veut) et qui prend en compte la version la plus récente :
@echo off setlocal enableextensions enabledelayedexpansion ver | find "10.0." >nul && chcp 65001 >nul || chcp 28591 >nul color 0A : ------------------------------------------------------------------------------------------------------------------------- : on définit les exécutables et les versions : ------------------------------------------------------------------------------------------------------------------------- set "App1=C:\Windows\System32\7za.exe#22.1.0.0" set "App2=%ProgramFiles%\VideoLAN\VLC\vlc.exe#3.0.17.4" set "App3=%ProgramFiles%\PuTTY\putty.exe#0.77.0.0" : ------------------------------------------------------------------------------------------------------------------------- : on traite les exécutables un par un : ------------------------------------------------------------------------------------------------------------------------- for /L %%A in (1,1,100) do ( if defined App%%A ( for /f "tokens=1,2 delims=#" %%E in ("!App%%A!") do ( echo. & echo ############# %%E if not exist "%%~E" (call :installApp%%A) call :check "%%~E" "%%F" && call :installApp%%A ) ) ) echo. & pause exit : ------------------------------------------------------------------------------------------------------------------------- : on vérifie si l'exécutable a besoin d'une mise à niveau : ------------------------------------------------------------------------------------------------------------------------- :check set "versionInstallee=" set "application=%~1" for /f "skip=2 tokens=2 delims=^=" %%A in ('"wmic datafile where name='%application:\=\\%' get version /format:list"') do ( if not defined versionInstallee set "versionInstallee=%%A" ) echo. echo Version installée : !versionInstallee! echo Dernière version : %~2 set "versionDisponible=%~2" set "versionDisponible=!versionDisponible:.= !" call :parsing !versionDisponible! || exit /b 1 echo. echo ^>^>^>^>^> Une mise à niveau est requise ^<^<^<^<^< echo. exit /b 0 : ------------------------------------------------------------------------------------------------------------------------- : on découpe le numéro de version en plusieurs digits : ------------------------------------------------------------------------------------------------------------------------- :parsing set /a index=0 for %%A in (%*) do ( set /a index+=1 set /a digitVD=%%A call :compare !versionInstallee:.= ! && exit /b 0 ) exit /b 1 : ------------------------------------------------------------------------------------------------------------------------- : on compare un digit avec un autre : ------------------------------------------------------------------------------------------------------------------------- :compare for /L %%A in (1,1,!index!) do if %%A GTR 1 (shift) if "%1"=="" (exit /b 0) if !digitVD! GTR %1 (exit /b 0) else (exit /b 1) : ------------------------------------------------------------------------------------------------------------------------- : on procède à la mise à niveau de l'exécutable concerné : ------------------------------------------------------------------------------------------------------------------------- :installApp1 "%~dp0veyon-4.7.3.0-win64-setup.exe" /S /NoMaster /NoStartMenuFolder /ApplyConfig=%~dp0configuration_pceleve.json "%%E" authkeys import master/public %~dp0master_public_key.pem "%%E" authkeys import master/private %~dp0master_private_key.pem goto :eof :installApp2 echo Installation de App2 goto :eof :installApp3 echo Installation de App3 goto :eof