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 :

Supprimer le dernier retour chariot d'un fichier [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut Supprimer le dernier retour chariot d'un fichier
    Bonjour

    J'ai un fichier de sortie .txt et je souhaiterai supprimer le dernier retour chariot.

    Je n'y parviens pas.

    Auriez-vous une piste s'il vous plaît ?

    En vous remerciant de vos réponses.

  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
    Voici une proposition, avec les limitations que l'utilisation du batch implique.

    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
    @echo off
    cls
     
    set src=texte.txt
    set dst=texte2.txt
     
    set /a count=0
    for /F "tokens=1,* delims=: usebackq" %%a in (`findstr /n "^" ^< "%src%"`) do set /a count=%%a
     
    for /F "tokens=1,* delims=: usebackq" %%a in (`findstr /n "^" ^< "%src%"`) do (
    	if "%%b" == "" (
    		echo.
    	) else (
    		if %%a EQU %count% (
    			echo|set /p=%%b
    		) else (
    			echo %%b
    		)
    	)
    )>>%dst%
     
    pause

  3. #3
    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
    Pourquoi batch sinon ? pour ce genre de manipulation (et tout le reste d'ailleur) tu devrais utiliser un autre langage, plus fiable.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Bonjour,

    Tout d'abord, merci beaucoup.

    Le script proposé fonctionne bien dans un script séparé. Cependant lorsque j'intègre le code dans mon script initial, j'obtiens le message d'erreur suivant:
    La syntaxe de la commande n'est pas correcte
    Voici l'extrait du script dans lesquels, il est inséré:
    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
    call:-f f2 %2
    if defined r_val (
     echo %~nx0: Please wait...
     %ls% -lGg %2 | %fr% -v "^d" | %fr% -v "%f_exc%" | %tl% -n+2 > %2\%t_tmp%
     %ct% %2\%t_tmp% | %ak% -v var="total " "{sum+=$3} END {print var sum}" > %2\%i_txt%
     %ct% %2\%t_tmp% | %fr% -v "%f_exc%" >> %2\%i_txt%
     %rm% %2\%t_tmp%
    
    set /a count=0
    for /F "tokens=1,* delims=: usebackq" %%a in (`findstr /n "^" ^< "%2\%i_txt%"`) do set /a count=%%a
     
    for /F "tokens=1,* delims=: usebackq" %%a in (`findstr /n "^" ^< "%2\%i_txt%"`) do (
        if "%%b" == "" (
            echo.
        ) else (
            if %%a EQU %count% (
                echo|set /p=%%b
            ) else (
                echo %%b
            )
        )
    )>>%2\test.txt
    
     set m_val=7
     call:-m
    )
    goto:eof
    Pour répondre à la deuxième question, j'aurai préféré utiliser la commande sed voir tr mais je ne parviens pas à gérer uniquement la dernière ligne.

  5. #5
    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
    Que dire si ce n'est que tu aime les variables
    Tu peux essayer comme ceci pour voir si cette simple ligne (elle compte le nombre de ligne du fichier) te génère une erreur. Ça sera plus facile à déboguer.
    Tu as testé avec le même fichier %i_txt% ?

    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
    call:-f f2 %2
    if defined r_val (
     echo %~nx0: Please wait...
     %ls% -lGg %2 | %fr% -v "^d" | %fr% -v "%f_exc%" | %tl% -n+2 > %2\%t_tmp%
     %ct% %2\%t_tmp% | %ak% -v var="total " "{sum+=$3} END {print var sum}" > %2\%i_txt%
     %ct% %2\%t_tmp% | %fr% -v "%f_exc%" >> %2\%i_txt%
     %rm% %2\%t_tmp%
     
    set /a count=0
    for /F "tokens=1,* delims=: usebackq" %%a in (`findstr /n "^" ^< "%2\%i_txt%"`) do set /a count=%%a
     
     set m_val=7
     call:-m
    )
    goto:eof

    Ps : je n'ai pas sed ni tr sur mon Windows 7

  6. #6
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Bon je vais utiliser directement une commande unix pour faire ce traitement. Cependant, je garde votre script de coté étant donné qu'il fonctionne.
    Merci beaucoup pour votre aide précieuse

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

Discussions similaires

  1. [Batch] Supprimer tous les retour chariots d'un fichier texte
    Par pol2095 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/03/2015, 08h50
  2. [KSH] supprimer le dernier retour chariot d'un fichier
    Par Cj_Dal dans le forum Shell et commandes POSIX
    Réponses: 12
    Dernier message: 22/08/2013, 15h41
  3. Supprimer retour chariot dans un fichier CSV
    Par smain_inf dans le forum VBScript
    Réponses: 2
    Dernier message: 20/08/2008, 09h56
  4. Mettre des retours chariot dans un fichier
    Par Isa31 dans le forum Langage
    Réponses: 8
    Dernier message: 02/03/2006, 16h13
  5. Problème retour chariot dans un fichier texte
    Par Redondo dans le forum Windows
    Réponses: 2
    Dernier message: 08/02/2006, 18h23

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