Comparaison de deux répertoires si même nom de fichier, renomer le fichier

hervoi Messages postés 4 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 13 mars 2012 - 12 mars 2012 à 13:35
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 14 mars 2012 à 17:28
Bonjour,
je désirerais comparer deux repertoires (+/- 6.000 fichiers). Si le nom de fichier est semblable on ajoute au nom de fichier relevant_

J'espère qu'une personne pourra m'aider,


Bonne journée,

Hervé.

14 réponses

lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
12 mars 2012 à 13:44
Bonjour,

Tu souhaites comparer quoi au juste? les noms de tous les fichiers présents dans les 2 répertoires distincts? ou bien juste le nom des 2 répertoires?
Ces 2 répertoires sont à des emplacements fixes et connus?


L'expérience, c'est une connerie par jour, mais jamais la même..
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 mars 2012 à 13:55
Salut

Il te faut donc lister chaque fichier du répertoire n°1 et vérifier si ce nom existe dans le répertoire n°2.
Normalement, ceci pourrait se faire avec la fonction Dir mais cette fonction ne permet de traiter qu'un seul répertoire à la fois.
Regarde <cette source> qui te donnera des explications et des idées.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 mars 2012 à 13:59
Voir aussi la version modifiée/améliorée de Renfield dans <cette source>
0
hervoi Messages postés 4 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 13 mars 2012
12 mars 2012 à 14:47
Merci déjà pour l'aide, donc oui je liste deux répertoires différents. Pour la comparaison on peut juste tenir compte du nom.
REP1, j'ai tous les fichiers.
REP2, je n'ai que quelques fichiers.

Je voudrais que si le fichier se trouve dans le REP2, le nom du fichier dans le REP1 prend un asterix ou autre en plus en début de nom.

Voilà ce que je vais essayer de faire.

Merci d'avance,

Hervé.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lolokun Messages postés 1241 Date d'inscription mardi 10 octobre 2006 Statut Membre Dernière intervention 27 août 2013 7
12 mars 2012 à 15:11
Bonjour,

Et donc, qu'as tu testé? As-tu été voir l'aide de la fonction dir, ou bien le lien donné par Jack pour t'en inspirer?
Tu dis que tu listes 2 répertoires, donc où est le problème? la comparaison?le renommage?


L'expérience, c'est une connerie par jour, mais jamais la même..
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 16:09
Bonjour,

Je vois que cela fait au moins deux fois qu'il est dit que l'on ne peut lister facilement avec Dir les fichiers contenus dans plusieurs sous-dossiers d'un même dossier, du fait d'une impossibilité, avec Dir, d'utiliser la "récursion". C'est à la fois exact et inexact. Excat car sans possibilité sur lui-même, inexact car la récursion est réalisable sur une procédure complémentaire, le tout étant très rapide.
Je crois donc que je vais déposer un tout petit code cette semaine (il est déjà prêt, mais en "brouillon" à rendre un peu plus clair).
Revenons à nos moutons ===>>
A hervoi :
Tu es en VB6 (la présente section du forum). Tu es bien en VB6, j'espère !
Il se trouve que VB6 a un contrôle Filelistbox !
Utilise deux de ces contrôles, un pour chacun de tes dossiers.
Et ton problème se résume alors à trois fois rien ! (comparaison et renommage).

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 16:13
Tu peux même accélérer grandement le traitement en :
- Alimentant une collection (par boucle sur la filelistbox2) par tous les articles qu'elle contient
- boucler sur la filelistbox1 et :
--- si pas déjà dans lma collection : ne rien faire
--- si dans la collection : ===>> renommer comme tu l'entends.

Nous aimerions te voir commencer ainsi (au moins tenter, sur ces bases) et nous montrer ce que tu as tenté.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 16:31
Je te mets sur la voie (un peu plus, même) :
Dim REP1 As String, REP2 As String, i As Long
  REP1 = "D:\monoutil"
  REP2 = "E:\titi"
  File1.Path = REP1
  File2.Path = REP2
  For i = 0 To File2.ListCount - 1
   MsgBox File2.List(i) ' alimente une collection en lieu et place
  Next
  For i = 0 To File1.ListCount - 1
   'si tentative d'ajout de File1.list(i) dans collection provoque erreur, alors est déjà dans la collection et on renomme
 Next

En espérant que tu es bien sous VB6, car pas de filelisbox sous VBA, par exemple ===>> ce qui mettrait une fois de plus en évidence l'absolue nécessité de veiller minutieusement au choix de la section dans laquelle on ouvre une discussion, hein ...


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
hervoi Messages postés 4 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 13 mars 2012
12 mars 2012 à 16:47
Encore merci.
En gros je sais cas y rien faire j'ai des bases plus que basics en vbscript. Je pense, que si j'avais les deux principes (comparer, renommer) je pourrais essayer "d'assambler".

Encore merci pour votre aide,

Hervé.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 16:54
Tu es en train de nous dire que tu ne sais pas du tout développer ?
Ce ne serait par hasard pas un exercice imposé, là ? === >>
- si oui : je n'irai pas plus loin (cela va tellement de soi)
- si non : expose-nous l'utilité d'une telle manoeuvre (car je ne la vois pas) !

- en tout état de cause : confirme que tu développes sous VB6 et non sous VBA (car sinon, comme dit plus haut : pas la même chose et on a perdu du temps avec 11 messages pour des prunes !)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
hervoi Messages postés 4 Date d'inscription jeudi 12 mars 2009 Statut Membre Dernière intervention 13 mars 2012
13 mars 2012 à 14:19
Bonjour,
Désolé, en effet, je suis en VBA.

Pas d'exercice imposé.
Ce script pourrait me faire gagner énormément de temps dans mon travail, mais je vais m'arranger autrement.

Encore désolé, bonne journée.

Hervé.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 mars 2012 à 14:44
En VBA !
Tout ce que j'ai donc écrit jusqu'ici est donc, purement et simplement, totalement inapplicable en VBA.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
14 mars 2012 à 17:16
 Bonjour le Forum,


En gros je sais cas y rien faire j'ai des bases plus que basics en vbscript. Je pense, que si j'avais les deux principes (comparer, renommer) je pourrais essayer "d'assambler".


Il suffit d'utiliser l'objet Dictionary.


Option Explicit
Const cstREP1 = "H:\REP1"
Const cstREP2 = "H:\REP2"
Const cstCHAR = "___"

Dim objFso
Set objFso = CreateObject("Scripting.FileSystemObject")

Call CreateDico(objFso.GetFolder(cstREP1), CreateObject("Scripting.Dictionary"))

Set objFso = Nothing
WScript.Quit
'######################################################
Sub CreateDico(argFolder, argDico)
    Dim objFile, arrDicoKeys, i
    
    For Each objFile In argFolder.Files
        argDico.Add objFile.Name, vbNullString
    Next
    
    arrDicoKeys = argDico.Keys

    For i = 0 To argDico.Count-1
        If objFso.FileExists(cstREP2 & arrDicoKeys(i)) Then
           objFso.MoveFile cstREP1 & arrDicoKeys(i), cstREP1 & cstCHAR & arrDicoKeys(i)
        End If
    Next
End Sub


jean-marc
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 mars 2012 à 17:28
Bonjour, Jean-Marc,

ou simplement une collection.
Mais je recommanderais personnellement d'éviter FSO !
La fonction Dir de VBA est plus rapide, beaucoup moins gourmande en ressources et, surtout, non dépendante de la non-inhibition de VBS sur la machine (c'est le cas sur les miennes ).
Elle est de surcroît accompagnée d'un exemple clair dans l'aide VBA.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous