Renommer à la volée plusieurs dossiers selon une liste

kyuubi66 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   -  
jogadyl Messages postés 14 Statut Membre -
Bonjour tout le monde,

On me demande pour mon travaille de renommer environ 4000 dossiers selon une liste, je m'explique :
Sur le réseau on a une arborescence s'appelant "base de données" qui contient environ 4000 dossiers tous nommés selon des codes de bâtiment (exemple : batiment 1 = 3860 , batiment 2 = 3956, ...)
On me dit que les codes (3860, 3956, ...) vont changer et qu'il faut que je renomme tout donc que je dise à mon script "quand tu rencontres le dossier 3860 tu le renommes "toto" par exemple.
Est-ce possible?
Merci

4 réponses

  1. kyuubi66 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   11
     
    up
    Personne ne sait m'aider? je ne vois pas vraiment comment je peux faire ça
    Merci de votre aide
    0
  2. jogadyl Messages postés 14 Statut Membre
     
    transforme le fichier qui contient les remplacements à faire et transforme-le en batch que tu pourras exécuter

    Par exemple si ton fichier se présente sous forme d'un tableau avec une colonne pour l'ancien nom et une autre pour le nouveau du genre

    3860 riri
    3956 fifi
    4153 loulou

    tu peux facilement le transformer avec un éditeur de texte en

    rename 3860 riri
    rename 3956 fifi
    rename 4153 loulou

    tu le sauve en .bat et voilà!

    Ce n'est pas de la programmation de haute volée mais c'est simple et rapide a mettre en oeuvre.
    0
  3. kyuubi66 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   11
     
    bonjour et merci pour ta réponse
    Je n'ai pas de fichier j'ai une arborescence réseau à multi niveaux donc le 3860 riri je ne sais pas où il se trouve dans mon arborescence... d'où mon problème
    Je ne sais pas si je suis clair
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      hello
      mais comment savoir en quel nom renommer un fichier ?
      0
  4. jogadyl Messages postés 14 Statut Membre
     
    Ça aurait été plus clair avec plus d'information sur la structure des répertoires, si les noms à changer pouvaient se retrouver à plusieurs endroits, sur la façon dont les noms à changer et les noms de remplacement sont nommés, ainsi que sur la structure du fichier qui contient les changements à effectuer.

    A défaut voici les conventions que j'ai utilisées :

    - les noms à changer peuvent se trouver n'importe où et même plusieurs fois dans l'arborescence.

    - ces noms et les noms de remplacement ne comportent pas d'espace. Si c'est le cas tu devras adapter. En revanche il n'y a pas de contrainte sur les noms de fichiers qui appartiennent à l'arborescence mais qu'on ne veut pas remplacer.

    - le fichier qui contient les anciens et les nouveaux noms des répertoire s'appelle remplace.txt
    Chaque ligne contient l'ancien nom et le nouveau nom séparés par des espaces ou des tabulations. Ces noms ne doivent pas contenir d'espaces et ne doivent pas être entre guillemets.

    echo off
    cls
    dir /ad /s /b >repertoires.txt
    if exist temp del temp
    for /f "tokens=1,2" %%A in (remplace.txt) do (
    for /f "tokens=*" %%R in ('findstr /I "%%A$" repertoires.txt') do (
    echo rename "%%R" "%%B" >> temp
    )
    )
    sort /R temp /O temp.bat
    del repertoires.txt
    del temp
    call temp.bat
    del temp.bat

    Le programme commence par construire la liste des répertoires à remplacer dans le fichier repertoires.txt

    Pour chaque répertoire on note le remplacement à faire dans un fichier temp par comparaison avec le fichier remplace.txt

    Dans le programme le nom à remplacer est %%A et le nom de remplacement est %%B. %%R est le chemin complet du répertoire à renommer.

    Il n'est en effet pas possible de faire les remplacements au fur à mesure car les indications du fichier repertoires.txt ne seraient plus valables.
    Il va falloir exécuter ces instructions dans un ordre tel que les instructions suivantes soient toujours possibles.

    ex:
    si on a les remplacements suivants à faire
    antoine toni
    emmanuel manu
    joseph jojo

    et que les répertoires se trouvent dans la même arborescence
    antoine\emmanuel\joseph

    Les remplacements à faire sont
    rename "antoine" toni
    rename "antoine\emmanuel" manu
    rename "antoine\emmanuel\joseph" jojo

    Si on fait les remplacements dans cet ordre, seule la première instruction aboutira.

    L'astuce consiste à reclasser les instructions enregistrées dans le fichier temp par ordre alphabetique inverse (c.a.d du plus long au plus court).
    Toutes les instructions peuvent alors s'exécuter sans problème.
    Le fichier classé est enregistré dans temp.bat et il n'y a plus qu'à le lancer pour faire le travail.
    0