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 :

Remplacer dans un fichier un mot par un autre en batch dos


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 50
    Points : 42
    Points
    42
    Par défaut Remplacer dans un fichier un mot par un autre en batch dos
    Bonjour,

    Voila mon problème j'ai un fichier qui se nomme toto.ini
    dans le fichier se trouve une ligne S:"Hostname"=hekla

    S:"Display Tab String"=
    D:"Enable Cursor Key Mode Switching"=00000001
    S:"Hostname"=hekla
    D:"Use Login Script"=00000000
    D:"Scroll To Clear"=00000001

    Il faut que j'arrive a changer cette ligne par S:"Hostname"=fuji

    dans un batch dos

    Merci de votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de NorocBzh
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2008
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 834
    Points : 1 265
    Points
    1 265
    Par défaut
    Salut,

    Si tu peux utiliser les commandes externes, tu as la commande switch :
    http://windows.developpez.com/faq/ba...s#replace_word

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 30
    Points
    30
    Par défaut
    BatchSubstitute.cmd:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SETLOCAL ENABLEEXTENSIONS
    SETLOCAL DISABLEDELAYEDEXPANSION
    
    if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
    call BatchSubstitute.cmd "a_remplacer" "remplacement" fichier.txt>fichier_out.txt

    --> Remplace dans fichier.txt la chaine de caractère a_remplacer par remplacement et créer un nouveau fichier fichier_out.txt

  4. #4
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    Citation Envoyé par boreux Voir le message
    BatchSubstitute.cmd:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SETLOCAL ENABLEEXTENSIONS
    SETLOCAL DISABLEDELAYEDEXPANSION
    
    if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
    for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
        set "line=%%B"
        if defined line (
            call set "line=echo.%%line:%~1=%~2%%"
            for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
        ) ELSE echo.
    )
    call BatchSubstitute.cmd "a_remplacer" "remplacement" fichier.txt>fichier_out.txt

    --> Remplace dans fichier.txt la chaine de caractère a_remplacer par remplacement et créer un nouveau fichier fichier_out.txt


    salut,

    cette technique a plusieurs lacunes:
    1/ Elle ne traite pas les caractères reservés

    CALL-EXPANSION peux provoquer des bugs avec les caractères '"&"' et '"'

    2/ Le temps de son execution peux être trop long

    l'utilisation du CALL-EXPANSION peux rendre l'execution du code lent, même trop lent, voci un petit exemple qui compare les deux expansions, je vais utiliser POWERSHELL pour afficher la durée de l'execution des codes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PS II> type EnableExp.bat
    
    @echo off
    setlocal enabledelayedexpansion
    for /l %%i in (1 1 10000) do (
       set u=%%i
       echo !u!
    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PS II> type CallExp.bat  
    
    @echo off
    setlocal disabledelayedexpansion
    for /l %%i in (1 1 10000) do (
       set u=%%i
       call echo %%u%%
    )
    on va utiliser le cmdlet 'measure-command' qui permet de mesurer le temps d'execution de nos scripts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PS II> (Measure-Command { .\CallExp.bat }).TotalSeconds
    33,1683043
    
    PS II> (Measure-Command { .\EnableExp.bat }).TotalSeconds
    0,7265476

    comme vous voyez, (dans ce cas précis) l'expansion avec CALL est ~32 fois plus lente

    Conclusion:

    Si on traite de 'gros' fichiers, il vaux mieux activer l'expansion retardé de variables.

Discussions similaires

  1. Remplacer une partie d'un mot par une autre
    Par darkman19320 dans le forum Linux
    Réponses: 3
    Dernier message: 22/06/2012, 10h47
  2. Réponses: 2
    Dernier message: 05/05/2010, 17h01
  3. remplacer un mot par un autre dans un stringbuffer ?
    Par rimas2009 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 09/09/2009, 14h41
  4. remplacement carré par ; dans un fichier excel crée par une macro
    Par om51ft dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/11/2007, 16h00
  5. Remplacer un mot par un autre dans un fichier
    Par vbcasimir dans le forum Linux
    Réponses: 8
    Dernier message: 25/04/2006, 12h08

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