IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Probleme de chaine dans une variable [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut Probleme de chaine dans une variable
    Bonjour,

    Je fais un script pour extraire la version d'un programme installé, cela fonctionne très bien si le programme en question se trouve dans "programfiles" mais plante si c'est en programfiles (x86)

    Mon code :
    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    set FILENAME="vlc.exe"
    set SOFT=VLC
    call :INSTALL
     
    set FILENAME="Firefox.exe"
    set SOFT=Firefox
    call :INSTALL
     
    :INSTALL
    set FILEPATH=
    FOR /F "delims=" %%f  in ('dir /S /B %FILENAME%') do set FILEPATH="%%f"
    echo Chemin : %FILEPATH%
     
    IF NOT '%FILEPATH%'=='' (echo Fichier Trouve : %FILEPATH%) else (
    Fichier NON Trouve
    GOTO :suite)
     
    for /f "tokens=*" %%a in ('powershell "(gi '%FILEPATH%').versioninfo.Fileversion"') do set VERS=%%a
    echo Version installee : %SOFT% %VERS%
    :suite
    pause
    GOTO :eof

    L'erreur survient ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=*" %%a in ('powershell "(gi '%FILEPATH%').versioninfo.Fileversion"') do set VERS=%%a
    quand le FILEPATH est "c:\programfiles (x86)\mozilla\firefox.exe" ce ne marche pas et fonctionne si le FILEPATH est "c:\programfiles\VideoLAN\VLC\vlc.exe".

    Je sais aussi que cela fonctionne si le FILEPATH est "%ProgramFiles(x86)%...." ou "%ProgramFiles%...."

    A ce stade je bloque, j'avais pensé à un remplacement de chaine mais j'ai pas reussi.

    Quelle solution préconisez-vous ?

    Merci à tous

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 546
    Points : 1 084
    Points
    1 084
    Par défaut
    Bonjour,

    Essayez comme ceci :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    @echo off
    chcp 65001 >nul
     
    call :INSTALL "vlc.exe" VLC
    call :INSTALL "firefox.exe" Firefox
     
    echo. & pause
    exit
     
    :INSTALL
    for /f "delims=" %%A in ('2^>nul dir /a-d /b /s "%ProgramFiles(x86)%\%~1"') do set "FILEPATH=%%A"
    for /f "delims=" %%A in ('2^>nul dir /a-d /b /s "%ProgramFiles%\%~1"') do set "FILEPATH=%%A"
     
    if "%FILEPATH%"=="" (
    	Fichier %1 NON Trouvé
    	echo. & pause
    	exit /b 1
    )
     
    for /f "tokens=*" %%a in ('powershell "(gi '%FILEPATH%').versioninfo.Fileversion"') do set VERS=%%a
    echo Version installée : %2 %VERS%
     
    goto :eof

  3. #3
    Membre du Club
    Inscrit en
    Juin 2013
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 44
    Points : 40
    Points
    40
    Par défaut
    Bonjour barnabe0057,

    C'est parfait, cela fonctionne parfaitement.

    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Pour info la cmdlet Get-ChildItem accepte les chemins multiples

    Aussi ce code PowerShell suffit :
    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    (Get-ChildItem -LiteralPath "C:\Program Files", "C:\Program Files (x86)" -Filter "vlc.exe" -Recurse -ErrorAction SilentlyContinue).VersionInfo.FileVersion

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Assigner une partie d'une chaine dans une variable.
    Par beware dans le forum Langage
    Réponses: 3
    Dernier message: 26/09/2012, 10h02
  2. Réponses: 4
    Dernier message: 18/08/2010, 11h45
  3. supprimer le début d'une chaine dans une variable
    Par emmesse dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 27/09/2008, 15h41
  4. Extraction de chaine dans une variable (vbs) ?
    Par liocifer dans le forum VBScript
    Réponses: 2
    Dernier message: 22/05/2008, 20h30
  5. Réponses: 13
    Dernier message: 14/06/2003, 22h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo