Renommer à la volée plusieurs dossiers selon une liste

Fermé
kyuubi66 Messages postés 39 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 20 avril 2021 - 7 avril 2015 à 12:06
jogadyl Messages postés 14 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015 - 14 mai 2015 à 10:44
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

kyuubi66 Messages postés 39 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 20 avril 2021 11
24 avril 2015 à 13:40
up
Personne ne sait m'aider? je ne vois pas vraiment comment je peux faire ça
Merci de votre aide
0
jogadyl Messages postés 14 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015
6 mai 2015 à 21:19
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
kyuubi66 Messages postés 39 Date d'inscription mercredi 13 août 2014 Statut Membre Dernière intervention 20 avril 2021 11
13 mai 2015 à 14:43
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
14 mai 2015 à 10:32
hello
mais comment savoir en quel nom renommer un fichier ?
0
jogadyl Messages postés 14 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 17 mai 2015
Modifié par jogadyl le 14/05/2015 à 10:46
Ç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