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 :

Synchronisation de listes de fichiers


Sujet :

Scripts/Batch

  1. #1
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut Synchronisation de listes de fichiers
    Bonjour,

    Je dispose d'un fichier texte contenant une liste de fichiers (avec chemin complet).

    Je souhaite, dans une arborescence donnée, supprimer tous les fichiers n'appartenant pas à celle liste.

    Je pense au processus suivant :

    a) Je récupère :
    - la liste contenue dans le fichier (liste A),
    - le dir de mon arborescence (liste B),
    (les deux listes sont triées par ordre alpha).

    b) Je prends le premier élément de ma liste B.

    c) Je balaye la liste A tant que l'élément de A est < à l'élément de B.

    d) Si, lorsque je m'arrête, l'élément de A = celui de B, je garde l'élement de B, sinon, je le supprime.

    e) Je prends l'élément suivant de la liste B ... et ainsi de suite.


    Je vois comment balayer la liste B, mais je ne sais pas comment balayer en parallèle la liste A (conformément au c) ci-dessus).

    Quelqu'un a-t-il une idée ?

    Philippe

  2. #2
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    Avec l'aide de findstr + cette discussion, tu devrais t'en sortir.

  3. #3
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut
    Merci beaucoup, je vais aller dans ce sens.

    Bonsoir.

    Philippe

  4. #4
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut
    Bonjour,

    Je piétine ...

    a) J'ai un fichier texte contenant une liste de fichiers (Liste.txt)

    b) Je balaye un répertoire à la recherche de fichiers n'appartenant pas à cette liste et, si c'est le cas, j'écris le nom du fichier dans Erreurs.txt
    Voici le test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo Liste.txt | findstr /i c:/"%%~ni%%~xi" > NUL
    if errorlevel 1 ...
    c) TOUS les fichiers de mon répertoire apparaissent en erreur, même s'ils appartiennent à Liste.txt

    Il doit y avoir un bug dans mon test.

    J'ai joint en pj le fichier Liste.txt et le fichier Erreurs.txt

    Merci pour toute aide.

    Philippe
    Fichiers attachés Fichiers attachés

  5. #5
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    C'est une blague tes pièces jointes ou quoi ???
    Bon, passons !

    1) T'as ton fichier liste.txt
    2) Tu listes le contenu de ton répertoire dans rep.txt par exemple
    3) Tu fais la comparaison :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /i /v /g:liste.txt rep.txt > erreurs.txt

  6. #6
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut
    Merci pour ta réponse.

    Concernant mes pièces jointes, tu peux très bien me dire qu'elles ne conviennent pas, sans pour autant utiliser ce ton moqueur...

    Je voulais juste montrer :

    a) un extrait de la liste des fichiers autorisés,
    b) un exemple de nom de fichier lu, considéré comme absent de la liste alors qu'il y figure pourtant, et donc écrit par mon script dans le fichier des erreurs.

    Tout celà au cas où le problème ne vienne pas de mon script mais des chaînes de caractères.

    J'ai testé la solution que tu proposes en prenant un fichier contenant une liste de noms de fichiers (H:\liste.txt) , en le recopiant en H:\ok.txt puis en supprimant de H:\ok.txt quelques noms de fichiers.

    findstr /i /v /g:H:\ok.txt H:\liste.txt > erreurs.txt me donne en erreurs.txt toute la liste.txt

    Fallait-il que les listes soient triés par ordre alphabétique ou quelque chose que ça ?

    Bonsoir.

  7. #7
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par Pgs Voir le message
    Concernant mes pièces jointes, tu peux très bien me dire qu'elles ne conviennent pas, sans pour autant utiliser ce ton moqueur...
    Non, non , t'y est pas. C'est le ton d'une personne qui ne comprend pas pourquoi on lui fait télécharger deux fichiers quasiment vides dans lesquels il y a de marqué "banana split".


    Citation Envoyé par Pgs Voir le message
    Fallait-il que les listes soient triés par ordre alphabétique ou quelque chose que ça ?
    Non. Je suis sur XP2 et je ne rencontre aucun problème avec ce que je t'ai proposé.

    Mon fichier de référence
    fic-ref.txt
    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
    35158055.jpg
    88157739.jpg
    Sans titre1.bmp
    63612917.jpg
    23183413.jpg
    98147716.jpg
    Sans titre 2.bmp
    65368092.jpg
    89048927.jpg
    Sans titre 3.bmp
    Sans titre 4.bmp
    Sans titre 5.bmp
    img0048nr.jpg
    gtx25.pdf
    img0049ji.jpg
    photo.bmp
    photo
    carbu.png
    72048910.jpg
    84259317.jpg
    20934600.jpg
    img0051sz.jpg

    Mon fichier de comparaison
    fic1+.txt
    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
    35158055.jpg
    88157739.jpg
    78601708.jpg
    85560953.jpg
    84259317.jpg
    Sans titre1.bmp
    Sans titre 2.bmp
    68604227.jpg
    Sans titre 8.bmp
    65368092.jpg
    89048927.jpg
    Sans titre 3.bmp
    Sans titre 4.bmp
    aaaaaaaaaaaaaaaaaaa
    Sans titre 5.bmp
    img0048nr.jpg
    gtx25.pdf
    carbu.bmp
    img0049ji.jpg
    photo.bmp
    photo
    carbu.png
    63612917.jpg
    23183413.jpg
    98147716.jpg
    72048910.jpg
    20934600.jpg
    img0051sz.jpg
    la ligne de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    findstr /i /v /g:fic-ref.txt fic1+.txt
    la sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    78601708.jpg
    85560953.jpg
    68604227.jpg
    Sans titre 8.bmp
    aaaaaaaaaaaaaaaaaaa
    carbu.bmp
    J'ai contrôlé tes fichiers en pièce jointe et ils n'ont aucun problème de codage.

    Donc, je ne peux rien de dire de plus si ce n'est de vérifier tes tests et ensuite la version de ton findstr.

  8. #8
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    salut,

    il vaut mieux utiliser Findstr comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr -liveg:a.txt b.txt

  9. #9
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut
    Bonsoir,

    Merci à vous deux.

    Sur ma machine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /i /v /g:H:\mylstx.txt H:\mylst.txt > H:\erreurs.txt
    me met tout H:\mylst.txt en erreur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr -liveg:H:\mylstx.txt H:\mylst.txt > H:\erreurs.txt
    Fonctionne impec.

    J'ai juste remarqué que, à cause de l'instruction chcp 1252 en début de script, les noms contenant des caractères accentués sortent en anomalie. Il sont correctement traités si j'enlève le chcp 1252.

    Pourtant, j'ai besoin de mettre le chcp 1252 car mon script utilise par ailleurs l'instruction copy.

    Que faire ?

    Bonne soirée et merci encore à vous deux.

    Phil

  10. #10
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par Pgs Voir le message
    Sur ma machine:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /i /v /g:H:\mylstx.txt H:\mylst.txt > H:\erreurs.txt
    me met tout H:\mylst.txt en erreur
    Et si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    findstr /l /i /v /g:H:\mylstx.txt H:\mylst.txt > H:\erreurs.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    findstr -livg:H:\mylstx.txt H:\mylst.txt > H:\erreurs.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    findstr -ivg:H:\mylstx.txt H:\mylst.txt > H:\erreurs.txt
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    findstr /ivg:H:\mylstx.txt H:\mylst.txt > H:\erreurs.txt
    est ce que ça change quelque chose ?
    Et en fait, c'est quoi ton système d'exploitation et ta version de findstr ?

    Salut I'm_HERE,

    Citation Envoyé par I'm_HERE Voir le message
    salut,
    il vaut mieux utiliser Findstr comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr -liveg:a.txt b.txt
    Ben pourquoi le "il vaut mieux" ? Bizarre que chez lui ça fonctionne uniquement avec cette syntaxe et pas l'autre. En tout cas, t'es tombé à pique. Enfin presque, j'aurais préféré un poste avant

    Citation Envoyé par Pgs Voir le message
    J'ai juste remarqué que, à cause de l'instruction chcp 1252 en début de script, les noms contenant des caractères accentués sortent en anomalie. Il sont correctement traités si j'enlève le chcp 1252.

    Pourtant, j'ai besoin de mettre le chcp 1252 car mon script utilise par ailleurs l'instruction copy.

    Que faire ?
    Ton chcp 1252 t'es pas obligé de le mettre au début de ton script. Tu peux le placer juste avant l'instruction pour laquelle tu en as besoin. Et si jamais tu dois revenir à un moment à l'état initial, et bien tu utilises chcp 850 (ou le code page propre à ta région).

  11. #11
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    Salut,

    Citation Envoyé par minnesota Voir le message
    Ben pourquoi le "il vaut mieux" ? Bizarre que chez lui ça fonctionne uniquement avec cette syntaxe et pas l'autre
    pour que les caractères réservés de Findstr soient intérprétés littéralement.
    Essayes avec ses noms de fichiers pour comprendre:

    in
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fichier.$$$
    ^fichier.txt
    fichier[2010].txt
    fichier.txt
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fichier.$$$
    ^fichier.txt
    fichier[2010].txt
    fichier.txt.
    aussi -liveg: est une forme concise de /l /i /v /e /g:

    Bonne Continuation

  12. #12
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Exact, le comportement par défaut de findstr est de type regex.
    Toutefois, la présence du point dans la liste de fichiers ne devrait pas conduire au comportement qu'il rencontre.

    Merci du retour.

  13. #13
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut
    Merci pour tout !

    Mon process marche nickel grâce à vous.

    Pour la petite histoire, mon objectif était d'avoir un seul jeu de playlists, et de pouvoir, à partir d'elles :

    a) synchroniser un baladeur compatible WMP,
    b) synchroniser une clé USB en utilisant, sur la clé, un répertoire pour chaque playlist (mon autoradio ne lit pas les playlists).

    ______________________________

    Dernière question : j'ai, jusqu'à présent, fait l'impasse sur la compréhension de ce qu'est une expression régulière.

    Je sais qu'il existe de nombreux tutos sur ce sujet, mais pouvez-vous me dire, en gros, ce que c'est ?

    Merci encore.

    Phil

  14. #14
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par Pgs Voir le message
    Dernière question : j'ai, jusqu'à présent, fait l'impasse sur la compréhension de ce qu'est une expression régulière.
    Y compris sur nos questions

  15. #15
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Au cas où tu n'aurais pas compris, je voulais dire par là que tu n'as pas encore répondu aux questions ?

    Citation Envoyé par minnesota Voir le message
    Et si tu fais .../...
    est ce que ça change quelque chose ?
    Et en fait, c'est quoi ton système d'exploitation et ta version de findstr ?

  16. #16
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /i /v /g:   => tout ressort en erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /l /i /v /g:  => ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr -ivg:  => tout ressort en erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    findstr /ivg:  => tout ressort en erreur
    Je ne sais pas comment connaître la version de findstr. Je suis sous Vista Intégrale SP2.

    Encore merci et bonne soirée.

    Phil

Discussions similaires

  1. Synchronisation à partir d'une liste de fichiers
    Par babeley dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 18/11/2011, 13h55
  2. Réponses: 7
    Dernier message: 19/09/2004, 22h01
  3. Liste de fichiers et de répertoires
    Par Freakazoid dans le forum C++
    Réponses: 4
    Dernier message: 09/08/2004, 17h16
  4. liste des fichiers d'un répertoire
    Par am dans le forum C
    Réponses: 3
    Dernier message: 04/08/2003, 17h03
  5. [Kylix] Liste des fichiers d'un répertoire
    Par Houben Jacques dans le forum EDI
    Réponses: 3
    Dernier message: 30/11/2002, 21h14

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