Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Batch] Editer plusieurs lignes dans un fichier

    1 mars 2021 à 17:40:54

    Bonjour à tous(tes)

    Voilà j'ai un soucis dans le code que j'ai pu récupérer sur ce forum le voici ci dessous :

    @echo off
    setlocal EnableDelayedExpansion
    echo.
    set file_tmp="provFile.ini"
     
    ::::::::::::: VARIABLE A MODIFIER :::::::::::::
        REM Correspond au nom de fichier avec une ligne à modifier
        set file="srv_sll.ini"
     
        REM Correspond à la ligne recherchée (ligne entière)
        set file_line_word="MDP="
     
        REM Correspond à la nouvelle ligne
        set file_line_replace=MDP=%1
    
        REM Correspond au nom de fichier avec une ligne à modifier
        set file="srv_sll.ini"
     
        REM Correspond à la ligne recherchée (ligne entière)
        set file_line_word="Server1="
     
        REM Correspond à la nouvelle ligne
        set file_line_replace=Server1=%2
    
        REM Correspond au nom de fichier avec une ligne à modifier
        set file="srv_sll.ini"
    
        REM Correspond à la ligne recherchée (ligne entière)
        set file_line_word="SRV3:"
     
        REM Correspond à la nouvelle ligne
        set file_line_replace=SRV3:%3
    
    
    ::::::::::::: VARIABLE A MODIFIER :::::::::::::
     
    If not exist %file% goto :file_notfound
    If exist %file_tmp% del /f /q %file_tmp%
    For /f "delims=" %%i in ('type %file%') do (
        set line=%%i
        set line="!line:"=!"
        If not !line!==%file_line_word% (
            echo %%i>>%file_tmp%
        ) else (
            echo %file_line_replace%>>%file_tmp%
        )
    )
    del /f /q %file%
    ren %file_tmp% %file%
    endlocal
    echo Modification termin‚e !
    goto :quit
    
    :file_notfound
    endlocal
    echo Fichier introuvable !
     
    :quit
    echo.
    pause>nul | echo Appuyez sur une touche pour quitter le script...
    exit

    Édition fonctionne que sur la variable %3 et non pas sur les autres, j'ai peut être zapper quelques choses dessus

    Mon but et de lancer le bat comme ceci : test.bat  %1  %2  %3

    Voilà le hic dans cette exemple c'est que le %3 fonctionne mais pas ceux d'avant.

    Édition de SRV3 fonctionne mais pourquoi il ne prend pas les variables %1  et %2

    Merci pour vos éclaircissements.

    Bien à vous

    • Partager sur Facebook
    • Partager sur Twitter
      1 mars 2021 à 19:15:50

      je crois que ça viens du fait que pour les autres lignes, c'est le symbole = et non pas le : sur ces lignes et donc la condition de la ligne 42 n'est pas rempli (du fait de la ligne 41) sauf erreur de ma part.
      • Partager sur Facebook
      • Partager sur Twitter
        1 mars 2021 à 20:59:18

        Bonsoir,

        Tu écrases la variable file, file_line_word et file_line_replace donc seul la dernière occurrence fonctionne.

        • Partager sur Facebook
        • Partager sur Twitter
          2 mars 2021 à 8:55:38

          Zaibai a écrit:

          Bonsoir,

          Tu écrases la variable file, file_line_word et file_line_replace donc seul la dernière occurrence fonctionne.

          Bonjour Zaibai ,

          Du coup j'ai fait autrement et j'ai trouver la solution !

          Mille merci pour vos conseil à tout les deux :

          @echo off
          setlocal EnableDelayedExpansion
          echo.
          set file_tmp="provFile.ini"
          set file="men_inst.ini"
           
          If not exist %file% goto :file_notfound
          If exist %file_tmp% del /f /q %file_tmp%
           
          ::::::::::::: VARIABLE A MODIFIER :::::::::::::
           
          call :edition "SER=" "SER=%1"
          call :edition "SERV=" "SERV=%2"
          call :edition "SRV:" "SRV:%3"
           
          ::::::::::::: VARIABLE A MODIFIER :::::::::::::
           
          endlocal
          echo Modification terminée !
          goto :quit
           
          :file_notfound
          endlocal
          echo Fichier introuvable !
           
          :quit
          echo.
          pause>nul | echo Appuyez sur une touche pour quitter le script...
          exit
           
          :edition
           
          For /f "delims=" %%i in ('type %file%') do (
              set line=%%i
              set line="!line:"=!"
              If not !line!==%1 (echo %%i) else (echo %~2)
          )>>%file_tmp%
           
          del /f /q %file%
          ren %file_tmp% %file%
           
          goto :eof



          -
          Edité par ArianeNetwork 2 mars 2021 à 9:08:52

          • Partager sur Facebook
          • Partager sur Twitter
            2 mars 2021 à 9:01:19

            mais bien sûr, la ligne 20 écrase la ligne 11 et la ligne 29 écrase la ligne 20 pour file_line_word (idem pour l'autre variable)
            • Partager sur Facebook
            • Partager sur Twitter

            [Batch] Editer plusieurs lignes dans un fichier

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            • Editeur
            • Markdown