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 :

Modifier/remplacer/ supprimer une ligne dans un fichier avec Batch [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 13
    Par défaut Modifier/remplacer/ supprimer une ligne dans un fichier avec Batch
    Bonjour à tous,
    je cherche à supprimer ou remplacer ou modifier une ligne dans mon fichier dont je connais le numéro de ligne, comment pourrais faire cela avec un ficher batch svp?
    je vous joins mon programme, je pensais qu'avec ca je pouvais remplacer la ligne 64 par ce que l'utilisateur rentre, mais la ligne s'ajoute effectivement a la ligne numéro 64 mias l'ancienne ligne est décaler a la ligne numéro 65, et si je ré executez le programme je décale encore et encore et tout ce cumule, quelqu'un aurait une idée svp?
    merci à vous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    rem @echo off 
    
    setlocal EnableDelayedExpansion
    ::::::::::::: DEBUT MESSAGE POUR L'UTILISATEUR :::::::::::::
    
        set /p NouvelVal=Entrez la fr‚quence que vous souhaitez entre 4Mhz et 24 MHz:
    
    ::::::::::::: FIN MESSAGE POUR L'UTILISATEUR  :::::::::::::
    
    
    ::::::::::::: DEBUT VARIABLE A MODIFIER :::::::::::::
    
        REM Correspond au nom de fichier avec une ligne à modifier (laisser les guillemets)
        set file="system_stm32f4xx.c"
    	REM Correspond au nom du fichier tamporaire(laisser les guillemets)
    	set file_tmp= "resultat.c"
        REM Correspond à la ligne recherchée (REGEX ; laisser les guillemets)
        set file_line_word="#define HSE_VALUE    ((uint32_t)"
        REM Correspond à la nouvelle ligne (pas besoin de guillemets)
        set file_line_replace=#define HSE_VALUE    ((uint32_t)%NouvelVal%000000)
    
    ::::::::::::: FIN VARIABLE A MODIFIER :::::::::::::
    
      set /a "compt=0"
      Rem correspond a la ligne de la variable a modifié
      set /a "varlim=64"
    
    if exist %file_tmp% del %file_tmp%
    
    for /f "tokens=1 delims=" %%i in ('type %file%') do (
    set line="%%i"
    set /a "compt+=1"  
    set /a Test=!varlim! - !compt!"
    echo !Test! |findstr /b "0"
    	if "!errorlevel!"=="0" 
    	echo !file_line_replace!>>%file_tmp%
    	) 
    	else (
    		echo %%i>>%file_tmp%
    		)
    	)
    del /F /Q %file%
    rename %file_tmp% %file%
    echo.
    echo Modification termin‚e !
    goto :quit
    
    :quit
    echo.
    pause>nul | echo Appuyez sur une touche pour quitter le script...
    exit

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Fait plutôt quelques chose comme ceci.
    C'est normal que tokens ne soit pas égale à toute la ligne (*) ?

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    rem @echo off 
     
    setlocal EnableDelayedExpansion
    ::::::::::::: DEBUT MESSAGE POUR L'UTILISATEUR :::::::::::::
     
        set /p NouvelVal=Entrez la fr?quence que vous souhaitez entre 4Mhz et 24 MHz:
     
    ::::::::::::: FIN MESSAGE POUR L'UTILISATEUR  :::::::::::::
     
     
    ::::::::::::: DEBUT VARIABLE A MODIFIER :::::::::::::
     
        REM Correspond au nom de fichier avec une ligne à modifier (laisser les guillemets)
        set file="system_stm32f4xx.c"
    	REM Correspond au nom du fichier tamporaire(laisser les guillemets)
    	set file_tmp= "resultat.c"
        REM Correspond à la ligne recherchée (REGEX ; laisser les guillemets)
        set file_line_word="#define HSE_VALUE    ((uint32_t)"
        REM Correspond à la nouvelle ligne (pas besoin de guillemets)
        set file_line_replace=#define HSE_VALUE    ((uint32_t)%NouvelVal%000000)
     
    ::::::::::::: FIN VARIABLE A MODIFIER :::::::::::::
     
      
      Rem correspond a la ligne de la variable a modifié
      set /a varlim=64
     
    if exist %file_tmp% del %file_tmp%
     
    set /a compt=0
    for /f "tokens=1 delims=" %%i in ('type %file%') do (
    set /a compt+=1
    IF !compt! EQU %varlim% (echo %file_line_replace%>>%file_tmp%) ELSE (echo %%i>>%file_tmp%)
    )
     
    del /F /Q %file%
    rename %file_tmp% %file%
    echo.
    echo Modification termin?e !
    goto :quit
     
    :quit
    echo.
    pause>nul | echo Appuyez sur une touche pour quitter le script...
    exit

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 13
    Par défaut
    Pardon, j'ai remi le * mais avec votre programme il y'a pas de changement, il n'ajoute même pas la ligne, mon fichier reste inchangé

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Bien vu !

    Je n'avais pas testé, voici la correction

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    @echo off 
     
    setlocal EnableDelayedExpansion
    ::::::::::::: DEBUT MESSAGE POUR L'UTILISATEUR :::::::::::::
     
        set /p NouvelVal=Entrez la fr?quence que vous souhaitez entre 4Mhz et 24 MHz:
     
    ::::::::::::: FIN MESSAGE POUR L'UTILISATEUR  :::::::::::::
     
     
    ::::::::::::: DEBUT VARIABLE A MODIFIER :::::::::::::
     
        REM Correspond au nom de fichier avec une ligne à modifier (laisser les guillemets)
        set file="system_stm32f4xx.c"
    	REM Correspond au nom du fichier tamporaire(laisser les guillemets)
    	set file_tmp= "resultat.c"
        REM Correspond à la ligne recherchée (REGEX ; laisser les guillemets)
        set file_line_word="#define HSE_VALUE    ((uint32_t)"
        REM Correspond à la nouvelle ligne (pas besoin de guillemets)
        set file_line_replace=#define HSE_VALUE    ^(^(uint32_t^)%NouvelVal%000000^)
     
    ::::::::::::: FIN VARIABLE A MODIFIER :::::::::::::
     
      Rem correspond a la ligne de la variable a modifié
      set /a varlim=64
     
    if exist %file_tmp% del %file_tmp%
     
    set /a compt=0
    for /f "tokens=* delims=" %%i in ('type %file%') do (
    	set /a compt+=1
    	IF !compt! EQU %varlim% (echo !file_line_replace!>>%file_tmp%) ELSE (echo %%i>>%file_tmp%)
    )
     
    del /F /Q %file%
    rename %file_tmp% %file%
    echo.
    echo Modification termin?e !
    goto :quit
     
    :quit
    echo.
    pause>nul | echo Appuyez sur une touche pour quitter le script...
    exit

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2017
    Messages : 13
    Par défaut
    c'est magic! Merci infiniment!!!
    Savez vous s'il y'a un moyen de passer par la variable qu'il ya dans la ligne 64? je veux dire est ce que je peux demander au programme de parcours mon fichier à la recherche de la variable HSE par expemle, qu'il doit trouver sous forme "#define HSE_VALUE ((uint32_t)9000000)" et de modifier uniquement le 9000000 par ce que l'utilisateur rentre? à savoir "#define HSE_VALUE ^(^(uint32_t^)%NouvelVal%000000^)" et à quoi servent les ^ que vous avez ajouter? je viens de les remarquer.
    Merci à vous

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Oui j'ai oublier de supprimer les ^

    On peux se passer du numéro de ligne, voici :
    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    @echo off 
     
    setlocal EnableDelayedExpansion
    ::::::::::::: DEBUT MESSAGE POUR L'UTILISATEUR :::::::::::::
     
        set /p NouvelVal=Entrez la fr?quence que vous souhaitez entre 4Mhz et 24 MHz:
     
    ::::::::::::: FIN MESSAGE POUR L'UTILISATEUR  :::::::::::::
     
     
    ::::::::::::: DEBUT VARIABLE A MODIFIER :::::::::::::
     
        REM Correspond au nom de fichier avec une ligne à modifier (laisser les guillemets)
        set file="system_stm32f4xx.c"
    	REM Correspond au nom du fichier tamporaire(laisser les guillemets)
    	set file_tmp= "resultat.c"
        REM Correspond à la ligne recherchée (REGEX ; laisser les guillemets)
        set file_line_word="#define HSE_VALUE    ((uint32_t)"
        REM Correspond à la nouvelle ligne (pas besoin de guillemets)
        set file_line_replace=#define HSE_VALUE    ((uint32_t)%NouvelVal%000000)
     
    ::::::::::::: FIN VARIABLE A MODIFIER :::::::::::::
     
      Rem correspond a la ligne de la variable a modifié
      set /a varlim=64
     
    if exist %file_tmp% del %file_tmp%
     
    set /a compt=0
    for /f "tokens=* delims=" %%i in ('type %file%') do echo %%i|findstr /R /C:"^#define HSE_VALUE    ((uint32_t)[0-9]*)$">nul&& (echo !file_line_replace!>>%file_tmp%) || (echo %%i>>%file_tmp%)
     
     del /F /Q %file%
    rename %file_tmp% %file%
    echo.
    echo Modification termin?e !
    goto :quit
     
    :quit
    echo.
    pause>nul | echo Appuyez sur une touche pour quitter le script...
    exit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer une ligne dans un fichier texte
    Par @yoyo dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 28/03/2006, 14h19
  2. Supprime une ligne dans un fichier texte
    Par dev7 dans le forum Linux
    Réponses: 4
    Dernier message: 28/03/2006, 01h33
  3. Supprimer une ligne dans un fichier text
    Par philippe13 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 14/03/2006, 16h43
  4. Supprimer une ligne dans un fichier
    Par tsing dans le forum Linux
    Réponses: 4
    Dernier message: 06/02/2006, 14h45
  5. Supprimer une ligne dans un fichier
    Par sbeu dans le forum Langage
    Réponses: 3
    Dernier message: 13/05/2003, 10h30

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