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 :

Compter le nombre de lignes dans plusieurs txt [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Profil pro
    Technicienne en géomatique
    Inscrit en
    Octobre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicienne en géomatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 38
    Points : 41
    Points
    41
    Par défaut Compter le nombre de lignes dans plusieurs txt
    Bonjour!

    Tout d'abord merci d'avance pour votre aide! Ce forum m'est grandement utile dans tout plein de projet, j'espère être en mesure d'y contribuer à mon tour éventuellement!

    Mon problème me semble simple, mais je n'arrive pas à faire fonctionner mon script.

    J'aimerais compter le nombre de lignes qu'il y a dans chacun des .txt dans un même dossier.

    Je sais faire une boucle pour lister tous les .txt.
    Et je sais comment compter le nombre de lignes dans un fichier.

    Mais je n'arrive pas à combiner ces deux commandes.

    Pour l'instant, ce code n'inscrit que le "compt" du dernier fichier, sans mettre le nom du fichier (il inscrit %2).
    Si j'enlève une des 2 parenthèses sur la ligne 4, j'obtiens la liste des fichiers sans le "compt"

    Et lorsque j'essaie de déplacer la ligne "echo" pour la sortir de la deuxième boucle, j'obtiens "commande echo active".

    En sortie, j'ai besoin d'un fichier txt ou il est écrit le nom du fichier et le compt.

    Pouvez-vous m'aider à trouver mon erreur?
    Merci beaucoup!

    Marie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for %%X in (*.txt) do (
    	Set Compt=0
    	for /f "delims=" %%i in ('type %%X') do (
    		set /a Compt+=1))
    	echo %Compt% %%X >> fichier.txt		
    )
    pause

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Code BAT : 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
    @echo off
    Title Compter le nombre de lignes dans les fichiers textes contenus dans un dossier
    Mode con cols=80 lines=15 & color 0A 
    Set LogFile=%~n0.txt
    If Exist "%LogFile%" Del "%LogFile%"
    for %%X in (*.txt) do ( Call :CountLines "%%~fX")
    pause
    Start %LogFile%
    Exit /b
    ::**************************************************************
    :CountLines
    set "file=%~1"
    set /a cnt=0
    for /f "delims=*" %%a in ('Type "%file%"^|find "" /v /c') do set /a cnt="%%a"
    echo "%file%"  =======^>  %cnt% lignes
    echo "%file%"  =======^>  %cnt% lignes >> %LogFile%
    ::**************************************************************

  3. #3
    Membre expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Points : 3 768
    Points
    3 768
    Par défaut
    Une petite correction a ton code @Hackoo.
    N'oublie pas de sortir du code après l'envoie de tes calls.
    Sinon la dernière partie du code sera envoyé dans le vide en fin de boucle.
    Et ça sera pas très jolie.

    Et exit/b en fin de :CountLines n'est pas nécessaire.

    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
    @echo off
    Title Compter le nombre de lignes dans les fichiers textes contenus dans un dossier
    Mode con cols=80 lines=15 & color 0A 
    Set LogFile=%~n0.txt
    If Exist "%LogFile%" Del "%LogFile%"
    for %%X in (*.txt) do ( Call :CountLines "%%~fX")
    Start %LogFile%
    exit/b
    
    ::**************************************************************
    :CountLines
    set "file=%~1"
    set /a cnt=0
    for /f "delims=*" %%a in ('Type "%file%"^|find "" /v /c') do set /a cnt="%%a"
    echo "%file%"  =======^>  %cnt% lignes
    echo "%file%"  =======^>  %cnt% lignes >> %LogFile%
    ::**************************************************************
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

  4. #4
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut
    Citation Envoyé par sachadee Voir le message
    Une petite correction a ton code @Hackoo.
    N'oublie pas de sortir du code après l'envoie de tes calls.
    Sinon la dernière partie du code sera envoyé dans le vide en fin de boucle.
    Et ça sera pas très jolie.

    Et exit/b en fin de :CountLines n'est pas nécessaire.

    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
    @echo off
    Title Compter le nombre de lignes dans les fichiers textes contenus dans un dossier
    Mode con cols=80 lines=15 & color 0A 
    Set LogFile=%~n0.txt
    If Exist "%LogFile%" Del "%LogFile%"
    for %%X in (*.txt) do ( Call :CountLines "%%~fX")
    Start %LogFile%
    exit/b
    
    ::**************************************************************
    :CountLines
    set "file=%~1"
    set /a cnt=0
    for /f "delims=*" %%a in ('Type "%file%"^|find "" /v /c') do set /a cnt="%%a"
    echo "%file%"  =======^>  %cnt% lignes
    echo "%file%"  =======^>  %cnt% lignes >> %LogFile%
    ::**************************************************************
    Sacha pour la correction +1 de ma part
    @+

  5. #5
    Membre du Club
    Profil pro
    Technicienne en géomatique
    Inscrit en
    Octobre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Technicienne en géomatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2009
    Messages : 38
    Points : 41
    Points
    41
    Par défaut
    Oui, ca marche!

    Merci beaucoup à vous deux!

    En fait, le premier script marchait aussi, c'est juste qu'il ajoutait un fichier inexistant à la fin, sans ligne, et je devais appuyer sur une touche pour sortir de la fenêtre (rapidement, un message apparaît pour dire qu'il y a quelque chose d'introuvable, mais je n'ai pas le temps de lire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    "fichiers texte\3486.txt"  =======>  349 lignes 
    "fichiers texte\3487.txt"  =======>  434 lignes 
    "fichiers texte\3488.txt"  =======>  546 lignes 
    "fichiers texte\3489.txt"  =======>  723 lignes 
    ""  =======>  0 lignes
    Mais effectivement, la deuxième version marche encore mieux!

    Merci beaucoup!

    Marie

  6. #6
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Voici un autre script hybride Batch/Vbscript :
    Code BAT : 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
    @echo off
    Title Script hybride (BATCH/VBS) pour compter le nombre de lignes dans les fichiers textes contenus dans un dossier
    Mode con cols=100 lines=20 & color 0A 
    Set LogFile=%Tmp%\%~n0.txt
    If Exist %LogFile% Del %LogFile%
    echo.
    echo         Compter le nombre de lignes dans les fichiers textes contenus dans un dossier
    TimeOut /T 3 /NoBreak >Nul
    CLS
    echo.
    for %%X in (*.txt) do ( Call :CountLines "%%~fX" && Call :CountLines "%%~fX" >> %LogFile%)
    echo.
    echo Appuyer sur une touche pour ouvrir le fichier Log 
    pause>Nul
    Start %LogFile%
    Exit /b
    ::**************************************************************
    :CountLines
    (echo File="%~1"
    echo Wscript.Echo File ^& "   =====>   " ^& CountLines(File^)
    echo Function CountLines(File^)
    echo Const ForReading = 1
    echo Dim fso, f, ra
    echo Set fso = CreateObject("Scripting.FileSystemObject"^)
    echo Set f = fso.OpenTextFile(File,ForReading^)
    echo ra = f.ReadAll
    echo CountLines = f.Line
    echo f.Close
    echo Set f = Nothing
    echo Set fso = Nothing
    echo End Function
    )>"%Tmp%\%~n0.vbs"
    cscript.exe /NoLogo "%Tmp%\%~n0.vbs"
    del "%Tmp%\%~n0.vbs" >nul
    ::**************************************************************
    Et n'oubliez pas mes dans le 1er script bande d’ingrats

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Gers (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2021
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Commande DOS intéressante (et peu connue)
    Il existe une commande DOS qui compte le nombre exact de lignes dans un ou plusieurs fichiers texte :
    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    find /v /c "&*fake&*" *.txt >fichier_resultat.txt
    La chaîne improbable "&*fake&*" permet de balayer toutes les lignes de chaque fichier, sans exceptions.

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

Discussions similaires

  1. Compter le nombre de ligne dans un fichier text
    Par nekcorp dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/06/2018, 14h10
  2. [VB.Net]Compter le nb de ligne dans fichier txt
    Par papy75 dans le forum Windows Forms
    Réponses: 20
    Dernier message: 15/12/2011, 15h30
  3. Compter le nombre de lignes dans un cellule
    Par Gautheron dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 01/02/2009, 18h48
  4. Compter le nombre de ligne dans un fichier
    Par amine_en_france dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 31/05/2007, 17h19
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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