Partage
  • Partager sur Facebook
  • Partager sur Twitter

[BATCH] Remplacer une ligne dans un fichier

La ligne dans le fichier .bat n'est pas à la meme place.

Sujet résolu
    26 avril 2024 à 11:40:22

    Bonjour,

    Je cherche depuis un fichier .bat à modifier un autre fichier Custom-New.bat. Je me suis inspiré de ce sujet : https://openclassrooms.com/forum/sujet/batch-remplacer-une-ligne-dans-un-fichier-texte-6e5d1 mais il m’enlève le début des lignes qui commencent par ":"

    Le but recherché est de modifier des chemins dans le fichier Custom-New.bat. Voici un extrait du fichier:

    REM extrait du fichier à modifier Custom-New.bat
    REM Ce fichier n'est pas toujours le même
    REM mais, les lignes à modifier toujours identique
    @echo off
    	set MachineMode=TRM700
    REM Chemin à modifier
    	set GHOSTFILE=SoftwareUpdates\TRM700.GHO
    REM Fin de la première modif
    	set PRODUCTVER=TRM 7.312.60
    	set TARGETMODEL1=HP rp%MachineMode%
    	if "%MachineMode:~0,2%" == "57" (set TARGETMODEL1=%TARGETMODEL1% Business System)
    	%DRV%:
    REM Lignes à retirer
    	if exist SoftwareUpdates\%GHOSTFILE% (
    		set GHOSTDIR=SoftwareUpdates
    	) else (
    		set GHOSTDIR=.
    	)
    REM FIN des lignes à retirer
    
    :ModelMatches
    		ghost32 -clone,mode=restore,src=%GHOSTDIR%\%GHOSTFILE%,dst=1,sze1=50000M,sze2=50000M,sze4=40000M -sure -fx
    	echo     Installation of %PRODUCTVER% is complete
    
    
    
    
    


    Voici l'avancement de mon fichier ModifRempl.bat :

    @echo off
    REM Extrait de mon fichier ModifRempl.bat
    :: set Source=C:\User\Toto\Test
    :Ghost
    echo.
    :: echo copie du CUSTOM.BAT à la racine de la clé,
    :: if exist Custom-New.bat del Custom-New.bat
    :: copy %Source%\CUSTOM.BAT .\Custom-New.bat
    echo Essai de modifier le(s) chemin du (des) fichier(s) .gho
    call :modifier_une_ligne "Custom-New.bat" "SoftwareUpdates" "set GHOSTFILE=.\TRM700.GHO" 8
    call :modifier_une_ligne "Custom-New.bat" "SoftwareUpdates" "REM Ce Que Je Veux Mettre Pour Remplacer La Ligne" 15
    call :modifier_une_ligne "Custom-New.bat" "SoftwareUpdates" "REM Ce Que Je Veux Mettre Pour Remplacer La Ligne" 16
    call :modifier_une_ligne "Custom-New.bat" "SoftwareUpdates" "REM Ce Que Je Veux Mettre Pour Remplacer La Ligne" 17
    call :modifier_une_ligne "Custom-New.bat" "SoftwareUpdates" "REM Ce Que Je Veux Mettre Pour Remplacer La Ligne" 18
    call :modifier_une_ligne "Custom-New.bat" "SoftwareUpdates" "REM Ce Que Je Veux Mettre Pour Remplacer La Ligne" 19
    echo Pour info, les appels à la fonction sont fermés.
    goto fin
    
    :modifier_une_ligne
    set file=%~1
    set a_remplacer=%~2
    set file_line_replace=%~3
    :: Je ne souhaite pas utiliser le numero de la ligne que je ne connais pas.
    set /a file_line_number=%4
    set file_tmp=temp_custom.bat
     (FOR /f "tokens=1* delims=:" %%a IN ('findstr /n "^" "%file%"') DO (
        SET "Line=%%b"
    ::	SET "Line=%Line:%%a%
        IF %%a equ %file_line_number% SET "Line=%file_line_replace%"
        setlocal EnableDelayedExpansion
        ECHO(!Line!
        endlocal
    ))>"%file_tmp%"
    )
    del /F /Q "%file%"
    rename "%file_tmp%" "%file%"
    echo Modification numero %file_line_number% est terminée.
    pause
    EXIT /B 0
    
    :fin
    pause

    Mes problèmes:

    - Je ne connais pas les numéros de ligne mais je connais les caractères à modifier.

    - Les lignes qui commencent par ":" sont modifiées.

    EX :

    :ModelMatches

     est malheureusement modifié par :

    ModelMatches


    Merci d'avance pour vos commentaires.

    • Partager sur Facebook
    • Partager sur Twitter
      26 avril 2024 à 13:03:57

      une alternative plus simple serait peut-être de passer ces chemins en argument de ligne de commandes de 1er bat.

      et alors, dans le 2nd bat, il suffit de lancer le 1er bat avec les bons chemins 

      Sinon delims=:  fait que le delimiteur (séparateur) est le ":" et donc il n'est pas retourner dans la variable du FOR (sauf erreur de ma part); il faudrait le remplacer un autre caractère non présent dans le fichier 

      • Partager sur Facebook
      • Partager sur Twitter
        26 avril 2024 à 14:26:18

        Comme tu le dis, peut être une piste. Il me faudrait un delims non présent dans mon fichier "Custom-New.bat" que je rajouterais à la copie du même fichier. Exemple un "#"

        Le Custom-New.bat (origine de CUSTOM.BAT) est un fichier qui est livré avec nos Ghost (image de disque) usine. Nous devons utiliser une clef USB par Ghost et nous avons vingtaine de machine avec 3 ou 4 PC différents. Donc il nous faudrait une petite centaine de clef USB par technicien.

        Mon souhait, serait d'utiliser un disque USB (ou grosse clef) pour ranger dans des répertoires différents, chaque ghost (avec son CUSTOM.BAT) et lancer un fichier .bat qui demande quel est le ghost à utiliser. Puis, de copier à la racine son CUSTOM.BAT, de modifier son chemin pour trouver les fichiers .gho (ghost).

        J'ai bien avancé. le nouveau chenin est récupéré avec un Shell en .vbs, plusieurs vérifications sont effectuées. Il me reste plus qu'a modifier le chemin du CUSTOM.BAT du ghost choisi.

        -
        Edité par BertPeaude 26 avril 2024 à 17:26:08

        • Partager sur Facebook
        • Partager sur Twitter
          26 avril 2024 à 16:52:52

          @BertPeaude Bonjour, je viens de retirer des spam votre dernier message, si cela arrive encore vous pouvez poster dans ce sujet Si votre message est considéré comme spam

          • Partager sur Facebook
          • Partager sur Twitter
            26 avril 2024 à 17:28:35

            AbcAbc6 a écrit:

            @BertPeaude Bonjour, je viens de retirer des spam votre dernier message, si cela arrive encore vous pouvez poster dans ce sujet Si votre message est considéré comme spam

            Merci de votre action.

            • Partager sur Facebook
            • Partager sur Twitter
              29 avril 2024 à 8:31:47

              Bonjour,

              Je n'est pas réussi a remplacer ma chaine de  caractère dans mon .bat mais, en utilisant PowerShell, cela a été beaucoup plus facile.

              Dans mon mon fichier ModifRempl.bat j'ai ajouté cette ligne :

              powershell -ExecutionPolicy Unrestricted -file ".\modification_texte.ps1" -Source %Source%


              PowerShell est activé (-ExecutionPolicy Unrestricted) et exécuté en lançant le fichier modification_texte.ps1 avec un argument qui pourra être récupéré avec la variable $Source.

              Dans mon fichier modification_texte.ps1 il y a une ligne par chaine de caractère à chercher et remplacer.

              L’intégralité de mon fichier modification_texte.ps1 :

              param ([String]$Source)
              (Get-Content -Path '.\Custom-copy.bat') -replace 'SOFTWAREUPDATES',$Source | Set-Content -Path .\Custom-New.bat
              (Get-Content -Path '.\Custom-New.bat') -replace 'dakSoftwareUpdates',$Source | Set-Content -Path .\Custom-New.bat
              (Get-Content -Path '.\Custom-New.bat') -replace 'ghost32','ghost64' | Set-Content -Path .\Custom-New.bat
              



              -
              Edité par BertPeaude 29 avril 2024 à 9:35:25

              • Partager sur Facebook
              • Partager sur Twitter

              [BATCH] Remplacer une ligne dans un fichier

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