Trouver un string dans .ini et le remplacer

Résolu
BatchCestCool -  
 BatchCestCool -
Bonjour,
cela fait un moment que je galère à faire un batch en cherchant sur les forums FR et EN.

J'aimerais créer un .bat universel qui me permet de changer une valeur dans un .ini.
Le dossier %UserProfile%\Documents\Travail\Photo\
contient plusieurs sous dossier contenant tous les deux un .ini , disons Pierre et Marcel. Mais les prénoms peuvent être différents sur un autre pc. Il s'agit d'un GUID en faites.
donc => --%UserProfile%\Documents\Travail\Photo\Pierre\fichier.ini
-----------%UserProfile%\Documents\Travail\Photo\Marcel\fichier.ini

J'aimerais changer la même valeur pour tous les .ini se trouvant dans le dossier parent , donc via une commande rentrer dans %UserProfile%\Documents\Travail\Photo\Pierre\fichier.ini ET %UserProfile%\Documents\Travail\Photo\Marcel\fichier.ini et trouver le string "monparametre=oui" pour le modifier en "monparametre=non"
et ensuite sauver le tout.

Voilà j'espère avoir été assez clair sur ma requête si vous avez des questions je laisse la page ouverte !
Merci

2 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 930
     
    Bonjour,

    Voilà qui devrait convenir :

    @echo off
    Setlocal enableextensions enabledelayedexpansion

    set racine=%UserProfile%\Documents\Travail\Photo

    if not exist "%racine%" (goto :eof)

    set param=monparametre^=yes
    set new=monparametre^=non

    if %racine:~0,2% EQU %CD:~0,2% (cd %racine%) else (cd /d %racine%)

    for /f "tokens=*" %%A in ('dir /s /b /a-d "*.ini"') do (call :modification "%%A" "%%~dpA" "conf0123456.txt")

    explorer /select,"%racine%"

    Endlocal
    exit

    :modification

    echo. & echo %~1
    set /a action=0

    for /f "usebackq tokens=*" %%B in ("%~1") do (
    set /a cible=0
    (echo %%B | findstr "%param%" > nul) && (set /a cible=1 & set /a action=1)
    if !cible! EQU 1 (echo %new% >> "%~2\%~3") else (echo %%B >> "%~2\%~3")
    )

    if !action! EQU 1 (move /Y "%~2\%~3" "%~1")
    if exist "%~2\%~3" (del /F /Q "%~2\%~3")

    goto :eof
    rem

    Il y a juste à modifier les 2 lignes soulignées, en indiquant le paramètre exact.
    1