Trouver un string dans .ini et le remplacer

Résolu/Fermé
BatchCestCool - 27 mai 2017 à 18:30
 BatchCestCool - 28 mai 2017 à 10:39
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

barnabe0057 Messages postés 14439 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 14 avril 2024 4 905
Modifié le 27 mai 2017 à 21:58
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
BatchCestCool
28 mai 2017 à 10:39
Super merci !
0