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 :

lire le contenu d'un ini et "traduire" une variable [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Par défaut lire le contenu d'un ini et "traduire" une variable
    Bonjour,


    Je cherche à lire le contenu d'un fichier ini, et attribuer les valeurs du résultat de ma recherche à des variables.
    Voici le contenu de test.ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [DIRLSVC]
    F2=%ProgramFiles(x86)%\App
    F2REL=%F2%\tst
    [DIRAPP]
    F2=C:\APP\newclient
    [LSVC]
    SUFFIX_SERVICE=tstesp
    J'ai ensuite 2 fichiers cmd
    read_ini.cmd

    Code : 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
    @setlocal enableextensions enabledelayedexpansion
    @echo off
    set file=%1
    set area=[%2]
    set key=%3
    set currarea=
    for /f "delims=" %%a in (!file!) do (
        set ln=%%a
        if "x!ln:~0,1!"=="x[" (
            set currarea=!ln!
        ) else (
            for /f "tokens=1,2 delims==" %%b in ("!ln!") do (
                set currkey=%%b
                set currval=%%c
                if "x!area!"=="x!currarea!" if "x!key!"=="x!currkey!" (
                    echo !currval!
                )
            )
        )
    )
    endlocal

    et test.cmd

    Code : 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
    24
    25
    for /f "delims=" %%a in ('call read_ini.cmd test.ini DIRLSVC F2') do (
        set F2=%%a
    	)
    
    
    
    for /f "delims=" %%a in ('call read_ini.cmd test.ini DIRLSVC F2REL') do (
        set F2REL=%%a
    )
    
    
    for /f "delims=" %%a in ('call read_ini.cmd test.ini DIRAPP F2') do (
        set LOCALF2=%%a
    )
    
    
    for /f "delims=" %%a in ('call read_ini.cmd test.ini LSVC SUFFIX_SERVICE') do (
        set SUFFIX_SERVICE=%%a
    )
    
    
    SET LocalDBInstall=%F2%\%SUFFIX_SERVICE%
    
    SET LocalClientInstall=%LOCALF2%\%SUFFIX_SERVICE%
    La variable F2 devrait contenir la valeur de %ProgramFiles(x86)% contenue dans l'ini, qui devrait être remplacée par la variable d'environnement C:\Program Files (x86).
    Malheureusement, quand je fais un echo de F2, j'obtiens %ProgramFiles(x86)% et pas C:\Program Files (x86)...
    De même, quand je fais un echo de LocalDBInstall, j'obtiens %ProgramFiles(x86)%\tstesp, et je voudrais avoir C:\Program Files (x86)\tstesp

    Comment faire pour que F2 ait comme valeur non pas la variable (%%) , mais la valeur de celle-ci?

  2. #2
    Membre éprouvé Avatar de rothen
    Femme Profil pro
    sans
    Inscrit en
    Février 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Février 2012
    Messages : 2
    Par défaut
    Bonjour,

    Il faut forcer l'interprétation de tes variables, avec ce script get.cmd ça devrait le faire, ça prend aussi en charge les espaces et les paramètres par défaut, voir le fichier de test et l'exemple plus bas :


    Code : 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
    @echo off
    setlocal
    
    set "key=%~1"
    if not "%~2"=="" set "ticket=%~2"
    if not "%~3"=="" set "file=%~3"
    set "flag=1"
    
    for /f "tokens=*" %%i in ('type "%file%"') do call :analyse %%~i 
    call echo.%%%key%%%
    endlocal
    goto :eof
    
    :analyse
    if %flag% equ 0 goto :eof
    set currline=%*
    if %flag% equ 2 if not "%currline:~0,1%"=="[" set %currline%&goto :eof
    if "%currline:~0,1%"=="[" if /i "%currline%"=="[%ticket%]" set flag=2& goto :eof
    if "%currline:~0,1%"=="[" if %flag% equ 2 set flag=0
    goto :eof

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [DIR LS VC] 
    F2=%ProgramFiles(x86)%\App
    F2REL=%F2%\tst
    [DIRAPP] 
    F2=C:\APP\newclient
    [LSVC] 
    SUFFIX_SERVICE=tstesp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    set "file=test.ini"
    set "ticket=DIR LS VC"
    for /f "tokens=*" %%i in ('get.cmd F2') do set t=%%~i
    echo.%t%
    for /f "tokens=*" %%i in ('get.cmd F2 DIRAPP') do set t=%%~i
    echo.%t%
    pause

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 11
    Par défaut
    Merci beaucoup, c'est testé et approuvé!!!

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/03/2015, 12h01

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