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 :

Récupérer tous les Noms de fichier dans plusieurs variables pour pouvoir les comparer [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Par défaut Récupérer tous les Noms de fichier dans plusieurs variables pour pouvoir les comparer
    Bonjour,

    Je cherche une astuce pour pouvoir récupérer tous les noms de fichiers d'un répertoire dans plusieurs variables.
    Le but est de pour pouvoir comparer ensuite ces variables (masque de fichier)... et faire une action.

    Exemple :
    Sous C:\test
    j'ai des fichiers du type :
    AAAA-001-DATETIME.TXT
    AAAA-001-DATETIME.TXT
    AAAA-002-DATETIME.TXT
    AAAA-003-DATETIME.TXT
    AAAA-003-DATETIME.TXT
    AAAA-004-DATETIME.TXT
    BBBB-001-DATETIME.TXT

    ....

    L'objectif est de récupérer chaque nom de fichier commençant par AAAA dans plusieurs variables de longueur de 8 caractères,
    Exemple :
    var1=AAAA-001
    var2=AAAA-001
    var3=AAAA-002
    var4=AAAA-003
    var5=AAAA-003
    var6=AAAA-004
    (BBBB n'est pas récupéré dans une variable car il ne commence pas par AAAA)


    pour pouvoir ensuite comparer le nom des fichiers et si des masques de fichier sont identiques, alors les concaténer dans un seul fichier du même nom.
    Exemple :
    AAAA-001-DATETIME.TXT
    AAAA-002-DATETIME.TXT
    AAAA-003-DATETIME.TXT
    AAAA-004-DATETIME.TXT

    J'ai trouvé un début de code qui me semble intéressant, mais le problème c'est qu'il liste les noms de fichier toujours dans la même variable :

    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
    @echo off
    CD C:\test
    for /r %%a IN (AAAA*.txt) DO Call :TEST1 %%~na %%~xa
    goto :SUITE
    :TEST1
    set file1=%1%2
    set mask1=%file1:~,8%
    echo.
    echo fichier1 = %file1%
    echo Masque1 = %mask1%
    echo.
    pause
    goto :SUITE
    :SUITE

    Comment faire pour obtenir chaque nom dans une variable différente ?

    Merci pour votre aide.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 549
    Par défaut
    Bonjour,

    Si ton but est de concaténer les fichiers de même masque, alors il n'y a pas besoin de se compliquer la vie à "variabiliser" tous les noms de fichiers, il suffit de concaténer :

    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
    @echo off
     
    CD C:\test
     
    for /r %%a in (AAAA*.txt) do call :TEST1 "%%~na" %%~xa
     
    exit
     
    :TEST1
    set file=%~1%2
    set mask=%file:~0,8%
    echo.
    echo fichier = %file%
    echo Masque = %mask%
    echo.
    pause
    type "%file%" >> "%mask%%2"
    goto :eof
     
    :SUITE

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Par défaut
    Merci pour cette réponse rapide.
    Mais, il doit y avoir un problème dans ma boucle car je me retrouve avec les fichiers plusieurs fois concaténés.... (3x)
    je continue de chercher.... mais toute aide est bienvenue.
    Merci.

  4. #4
    Membre averti
    Homme Profil pro
    Actif ouais
    Inscrit en
    Septembre 2017
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Actif ouais

    Informations forums :
    Inscription : Septembre 2017
    Messages : 45
    Par défaut
    Il doit y avoir un problème dans ma boucle
    je me retrouve avec les fichiers plusieurs fois concaténés.... (3x)
    3x systématiquement, ou le nombre exact de fichiers que tu unis ?

  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
    Une autre proposition

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
     
    set dossier=C:\test
    set mask=AAAA*.txt
    set out=out.txt
     
    del /F "%dossier%\%out%" 1>nul 2>nul
    for /r "%dossier%" %%a IN (%mask%) DO if exist "%dossier%\%out%" (copy /b "%dossier%\%out%" + "%%~a" "%dossier%\%out%" 1>nul) else (copy /b "%%~a" "%dossier%\%out%" 1>nul)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 26
    Par défaut
    Citation Envoyé par ericlm128 Voir le message
    Une autre proposition

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
     
    set dossier=C:\test
    set mask=AAAA*.txt
    set out=out.txt
     
    del /F "%dossier%\%out%" 1>nul 2>nul
    for /r "%dossier%" %%a IN (%mask%) DO if exist "%dossier%\%out%" (copy /b "%dossier%\%out%" + "%%~a" "%dossier%\%out%" 1>nul) else (copy /b "%%~a" "%dossier%\%out%" 1>nul)

    Merci beaucoup ericlm128.
    Le code fonctionne parfaitement. Nickel. Merci. !!

    C'est vrai que je me suis un peu pris la tête pour rien quand même....
    comme me l'a fait remarqué barnabe0057.
    D'ailleurs le code de barnabe0057 fonctionne aussi,
    c'est juste que j'avais oublié que j'avais un sous répertoire dans lequel j'avais des copies des fichiers...
    et la ligne de code :
    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    for /r %%a in (AAAA*.txt) do call :TEST1 "%%~na" %%~xa
    allait chercher aussi dans ce sous répertoire : du coup, le batch concaténait tous mes fichiers (3 au total) dans le nouveau...
    Il suffisait d'enlever le " /r " pour que ça fonctionne correctement, vu que le répertoire est déclaré au dessus :" cd C:\test "

    En fait ce simple code suffirait :

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @echo off
    CD C:\test
    if exist AAAA-001-*.txt copy AAAA-001-*.txt AAAA-001.txt

    Mais ericlm128 m'a fait découvrir une autre façon de voir...

    En revanche, je me heurte à un petit problème de caractère spécial, qui vient s'ajouter à la fin du fichier
    (une petite flèche vers la droite comme celle du pavé numérique → ; retour chariot ?)
    J'ai essayé de modifier le format d'enregistrement de mon batch : OEM, ANSI, etc... rien n'y fait...

    J'aurai bien la solution de supprimer la dernière ligne du fichier avec ce code :

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        setlocal enabledelayedexpansion
        set FILE=AAAA-001.txt
        for /f "tokens=*" %%# in ('type %FILE%') do (
          set /a COUNT+=1
          set LINE_!COUNT!=%%#
          )
        set /a CORR=COUNT-1
        for /l %%$ in (1,1,%CORR%) do echo !LINE_%%$!>>T#
        del %FILE%
        ren T# %FILE%

    mais cette solution ne me plaît pas trop...
    car supprimer une ligne dans un fichier de façon systématique me semble un peu risqué...

    Auriez-vous une idée ??
    Merci.

  7. #7
    Membre émérite
    Homme Profil pro
    Développeur .NET en devenir
    Inscrit en
    Août 2017
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET en devenir
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 549
    Par défaut
    Bizarre, est-ce que ça va mieux si tu rajoutes cette ligne entre TYPE et GOTO :

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/10/2017, 14h08
  2. Récupérer des noms de fichier dans une table pour les placer en masque du tfilelist
    Par charliplanete dans le forum Développement de jobs
    Réponses: 11
    Dernier message: 24/08/2011, 17h16
  3. Récupérer le nom du fichier dans une variable
    Par Patrick07 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 07/06/2011, 15h35
  4. [load] Nom de fichier dans une variable
    Par captaine93 dans le forum MATLAB
    Réponses: 6
    Dernier message: 20/09/2009, 12h55
  5. Shell: récupérer le bon nom de fichier dans une variable
    Par claralavraie dans le forum Linux
    Réponses: 1
    Dernier message: 10/01/2006, 11h45

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