Bonjour je cherche une âme charitable qui m'aiderais à résoudre mon problème.
J'ai un code pour un Bat que j'ai trouvé sur un forum, merci à l'auteur si c'est ici. ( Je ne retrouve plus où c'était )
Le BAT cherche et change du texte dans un fichier, cela fonctionne très bien lorsque le BAT et le fichier à modifier sont dans le même dossier.
Maintenant j'aimerais qu'il fasse de même mais dans des sous-dossiers différents où il y a d'autres fichiers à modifier. Les fichiers ont le même nom, mais ont des textes différents.
Dossier de base ( localisation du BAT ) / Sous-dossier A / Sous-dossier AA ( localisation du fichier à modifier )
---------------------------------------------------------------/ Sous-dossier AB ( localisation du fichier à modifier )
---------------------------------------------------------------/ Sous-dossier AC ( localisation du fichier à modifier )
--------------------------------------------/ Sous-dossier B / Sous-dossier BA ( localisation du fichier à modifier )
---------------------------------------------------------------/ Sous-dossier BB ( localisation du fichier à modifier )
---------------------------------------------------------------/ Sous-dossier BC ( localisation du fichier à modifier )
Etc.....
Je pense qu'il faut sans doute une boucle, alors sur la ligne 40 j'ai essayé ça et forcément cela ne marche pas ( désolé!! je suis vraiment nul ):
For /R %~dp0 %%f in (*.txt) do (
Je pense qu'il me manque l'autre parenthèse ")" mais je ne sais pas où la mettre et je ne sais même pas si cela a du sens.
Je vous remercie d'avance pour votre aide
GildasB
Voici le code du BAT :
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| @echo off
setlocal EnableDelayedExpansion
echo.
REM Fichier de configuration
set file_tmp=infos_temporaire.ini
::::::::::::: VARIABLES A MODIFIER :::::::::::::
REM Correspond au nom de fichier avec une ligne à modifier (pas de guillemets)
set file=infos_Frequences.txt
REM Correspond à la ligne recherchée & Remplacée 1
set file_line_regex[1]= frequency : 0.1
set file_line_replace[1]= frequency : 0.05
REM Correspond à la ligne recherchée & Remplacée 2
set file_line_regex[2]= frequency : 0.4
set file_line_replace[2]= frequency : 0.1
REM Correspond à la ligne recherchée & Remplacée 3
set file_line_regex[3]= frequency : 0.5
set file_line_replace[3]= frequency : 0.2
REM Correspond à la ligne recherchée & Remplacée 4
set file_line_regex[4]= frequency : 0.7
set file_line_replace[4]= frequency : 0.3
REM Correspond à la ligne recherchée & Remplacée 5
set file_line_regex[5]= frequency : 1
set file_line_replace[5]= frequency : 0.35
::::::::::::: VARIABLES A MODIFIER :::::::::::::
REM Version dans même dossier fonctionnelle:
REM cd /d %~dp0
REM Version dans l'ensemble des dossiers et sous dossiers :
For /R %~dp0 %%f in (*.txt) do (
Rem Code original :
If not exist "%file%" (goto :file_notfound)
If exist "%file_tmp%" (del /F /Q "%file_tmp%")
For /f "delims=" %%i in ('type "%file%"') do (
call :replace "%%i"
)
del /F /Q "%file%"
rename "%file_tmp%" "%file%"
echo Modifications finies !
goto :quit
:replace
set line=%*
set "b_replace=False"
For /L %%j in (1,1,5) do (
echo !line! | findstr /RC:"!file_line_regex[%%j]!" >nul
If !errorlevel! EQU 0 (
set "b_replace=True"
echo !file_line_replace[%%j]!>>"%file_tmp%"
)
)
if "%b_replace%"=="False" (echo !line:~1,-1!>>"%file_tmp%")
GOTO:EOF
:file_notfound
echo Le fichier "%file%" est introuvable ^^!
:quit
echo.
pause>nul | echo Appuyez sur une touche pour quitter le script...
exit |
Partager