Demande d'aide pour remplacer des données dans des .txt

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

Répondre
Liquid
Batcheur occasionnel
Messages : 4
Enregistré le : 16 févr. 2018 12:41

Demande d'aide pour remplacer des données dans des .txt

Message par Liquid »

Salut à tous, je suis tout neuf dans le domaine, donc si mes questions vous paraissent con, c'est qu'elles le sont :)
La dernière fois que j'ai touché à des commandes DOS, ça devait être sur Windows 2 avec un 80286 :p
Voilà mon petit souci, j'aimerais savoir s'il est possible de créer un script pour remplacer automatiquement une partie de texte par un autre au sein d'un fichier .txt.
Exemple: remplacer la donnée "vic" par "mec" automatiquement au sein d'un fichier .txt.
Merci d'avance pour vos réponses éclairées, si c'est faisable ça me sauve la journée de boulot :p
Modifié en dernier par Liquid le 23 févr. 2018 13:14, modifié 1 fois.
Hackoo
Batcheur débutant
Messages : 14
Enregistré le : 27 juil. 2012 02:30

Re: Demande d'aide pour remplacer des données dans des .txt

Message par Hackoo »

Si tu as un seul fichier alors, tu peux l'éditer par notepad ou bien notepad++
Il vous suffit de cliquer sur les deux touches ensembles Ctrl+H puis rechercher et remplaçer
Si tu as plusieurs fichiers texte, alors il faut faire un batch :D
EDIT :

Code : Tout sélectionner

@echo off
Title Rechercher et remplacer dans (*.txt)
Set "Tmpvbs=%temp%\Tmpvbs.vbs"
set "String2Find=personnes_vphysiques_vic"
set "ReplaceWith=personnes_physiques_mec"
setlocal enableDelayedExpansion
for /f "delims=" %%f in ('Dir /a-d /b /s "*.txt"') do ( 
    Set "InputFile=%%f"
    Set "OutPutFile=%%~dpf%%~nf_%%~xf"
    Call :Replace !String2Find! !ReplaceWith! "!InputFile!" "!OutPutFile!"
)
If Exist "%Tmpvbs%" Del "%Tmpvbs%"
pause & exit

::*************************************************************
:Replace <String2Find> <ReplaceWith> <InputFile> <OutPutFile>
(
    echo Data = WScript.StdIn.ReadAll
    echo Data = Replace(Data,"%~1","%~2",1, -1, 1^)
    echo WScript.StdOut.WriteLine Data
)>"%Tmpvbs%"
cscript //nologo "%Tmpvbs%" < "%~3" > "%~4"
Move /Y "%~4" "%~3">nul
exit /b
::*************************************************************
Liquid
Batcheur occasionnel
Messages : 4
Enregistré le : 16 févr. 2018 12:41

Re: Demande d'aide pour remplacer des données dans des .txt

Message par Liquid »

Merci infiniment, c'est tout bonnement fabuleux! :D
Liquid
Batcheur occasionnel
Messages : 4
Enregistré le : 16 févr. 2018 12:41

Re: Demande d'aide pour remplacer des données dans des .txt

Message par Liquid »

J'ai maintenant un autre souci: comme je bosse sur un fichier Xml transormé en .txt, je crois que je suis embêté avec les balises "<XXX>".
Qu'est-ce qui ne va pas dans ce script?

Code : Tout sélectionner

@echo off
Title Rechercher et remplacer dans (fichier.xml)
Set "Tmpvbs=%temp%\Tmpvbs.vbs"
set "String2Find=VIC"
set "ReplaceWith=MEC"
Set "String2Find="<XXX>""
set "ReplaceWith="<XXX><XXX>XXX</XXX><XXX>XXX</XXX><XXX>""
setlocal enableDelayedExpansion
for /f "delims=" %%f in ('Dir /a-d /b /s "fichier.xml"') do (
    Set "InputFile=%%f"
    Set "OutPutFile=%%~dpf%%~nf_%%~xf"
    Call :Replace !String2Find! !ReplaceWith! "!InputFile!" "!OutPutFile!"
)
If Exist "%Tmpvbs%" Del "%Tmpvbs%"
pause & exit

::*************************************************************
:Replace <String2Find> <ReplaceWith> <InputFile> <OutPutFile>
(
    echo Data = WScript.StdIn.ReadAll
    echo Data = Replace(Data,"%~1","%~2",1, -1, 1^)
    echo WScript.StdOut.WriteLine Data
)>"%Tmpvbs%"
cscript //nologo "%Tmpvbs%" < "%~3" > "%~4"
Move /Y "%~4" "%~3">nul
exit /b
::*************************************************************
 
Modifié en dernier par Liquid le 23 févr. 2018 16:57, modifié 1 fois.
Liquid
Batcheur occasionnel
Messages : 4
Enregistré le : 16 févr. 2018 12:41

Re: Demande d'aide pour remplacer des données dans des .txt

Message par Liquid »

Bon j'ai trouvé comment faire pour les "<" et ">", il faut les écrire "^<".

Code : Tout sélectionner


@echo off
Title Rechercher et remplacer dans (fichier.xml)
Set "Tmpvbs=%temp%\Tmpvbs.vbs"
set "String2Find=VIC"
set "ReplaceWith=MEC"
Set "String2Find=^<XXX^>"
set "ReplaceWith="^<XXX^>^<XXX^>XXX^</XXX^>^<XXX^>XXX^</XXX^>^<XXX^>"
setlocal enableDelayedExpansion
for /f "delims=" %%f in ('Dir /a-d /b /s "fichier.xml"') do (
    Set "InputFile=%%f"
    Set "OutPutFile=%%~dpf%%~nf_%%~xf"
    Call :Replace !String2Find! !ReplaceWith! "!InputFile!" "!OutPutFile!"
)
If Exist "%Tmpvbs%" Del "%Tmpvbs%"
pause & exit

::*************************************************************
:Replace <String2Find> <ReplaceWith> <InputFile> <OutPutFile>
(
    echo Data = WScript.StdIn.ReadAll
    echo Data = Replace(Data,"%~1","%~2",1, -1, 1^)
    echo WScript.StdOut.WriteLine Data
)>"%Tmpvbs%"
cscript //nologo "%Tmpvbs%" < "%~3" > "%~4"
Move /Y "%~4" "%~3">nul
exit /b
::*************************************************************
 
Maintenant je pense que c'est les fins de balise "/" qui me posent problème, il me sort "Le chemin d'accès spécifié est introuvable. Le fichier spécifié est introuvable." :?
Edit: j'ai testé en enlevant les slashs, même problème :cry:
Hackoo
Batcheur débutant
Messages : 14
Enregistré le : 27 juil. 2012 02:30

Re: Demande d'aide pour remplacer des données dans des .txt

Message par Hackoo »

Salut ;)
Pouvez-vous me poster le fichier XML en expliquant mieux ton but ?
Merci !
Répondre