Je possède une collection de fichiers PDF que j'accumule depuis des années et j'avais initialement commencé à préfixer leurs noms avec le nom de l'éditeur pour avoir une certaine forme de classement (par exemple : O'Reilly-PHP Cookbook.pdf). En ayant réuni des milliers de pdf en 5 ou 6 ans, je me suis rendu compte que ça aurait été plus approprié de les classer comme mes mp3, en créant un répertoire par éditeur et en les regroupant à l'intérieur. Classés ainsi, il n'était plus nécessaire de voir apparaître l'éditeur dans le nom des fichiers.
Comment faire un ménage rapide sur un volume élevé de fichiers ? Je sais qu'il existe des logiciels commerciaux et des sharewares qui peuvent faciliter le travail mais je n'ai pas le goût de polluer mon poste pour une simple opération. De plus, étant un programmeur professionnel, pourquoi est-ce que je me laisserais tenter par la facilité alors que je peux moi-même écrire un fichier batch tout simple ? Une bonne opportunité pour programmer quelques lignes et me sauver beaucoup de temps sur une opération manuelle peu stimulante. De plus, ça me permet d'apprendre et de réviser des concepts.
Voici le script que j'ai écrit pour répondre aux appels similaires à celui-ci (avec 3 arguments) :
script.bat source mot_recherché remplacer_par
> script.bat "C:\Documents and Settings\Code18\PDF\" O'Reilly-
Le dernier argument est laissé vide car je veux le remplacer par une chaîne vide (autrement dit, juste retirer le mot clé recherché).
Le contenu de script.bat :
@echo offMis à part les lignes insérées pour la lisibilité, le script compte moins de 15 lignes de code (moins de 1 Kb!) et s'exécute sur la totalité des fichiers en à peine quelques secondes.
rem http://code18.blogspot.com
set v_find=%2
set v_replace=%3
for /r %1 %%i in (*.pdf) do (
set v_path="%%~dpi"
set v_filename="%%~nxi"
call :rename
)
goto :eof
:rename
CALL set v_newfilename=%%v_filename:%v_find%=%v_replace%%%
ren %v_path%\%v_filename% %v_newfilename%
Au début, je récupère les paramètres de la commande indiquant quoi rechercher (v_find) et par quoi le remplacer (v_replace) pour les conserver dans des variables (set). J'effectue une boucle récursive dans le répertoire racine (%1) et sous-répertoires pour ne pas avoir à tenir compte de leur emplacement dans l'arborescence et j'applique un filtre pour ne rechercher que les fichiers pdf.
Pour chaque fichier, j'extrais le chemin incluant de drive avec le flag "d". Autrement, lorsqu'il tentera de renommer le fichier, il risque de se plaindre que "The system cannot find the path specified". Je récupère aussi le nom du fichier avec son extension (%%~nxi). Ceci me permettra de procéder au remplacement uniquement sur le nom du fichier et non pas sur le chemin s'il s'avérait que le terme recherché se trouve aussi dans le path.
J'effectue un appel à une pseudo-fonction à l'extérieur de la boucle pour contourner le problème d'assignation aux variables que le script ne semble pas reconnaître correctement au moment du remplacement (dans :rename). Dans le bloc de code :rename, je crée une nouvelle variable qui contient le nouveau nom de fichier que j'obtiens par le remplacement avec la syntaxe %v_filename:find=replace% sur la variable %v_filename%. Comme j'utilise d'autres variables pour savoir quoi chercher et quoi remplacer, j'ajoute les % aux bons endroits. Je crois que si j'avais appellé cmd.exe avec le flag /v, j'aurais pu substituer les variables %var% par !var! pour une meilleure lisibilité dans l'imbrication. Enfin, je renomme le fichier avec ren.
Vous voyez un peu l'idée. Tout comme moi, vous pouvez modifier le script pour le réutiliser dans d'autres contextes, par exemple avec des mp3 pour retirer un préfixe (souvent le nom de l'artiste), retirer le préfixe automatique des photos provenant d'une caméra numérique (DSCFxxxx), etc. Une seule chose : faites attention aux délimiteurs avec des espaces dans les remplacements, je ne me suis pas encore penché sur le problème (ex: O'Reilly-Nom_du_livre versus O'Reilly - Nom_du_livre).
Faites en bon usage et n'hésitez pas à l'adapter à vos besoins.
J'ai pu renommer 4309 fichiers d'un seul coup avec ton script. Merci
Simple et efficace et donc facile à prendre pour base pour faire des modifications. Merci beaucoup!
Bonjour,
Merci pour ce petit bijou qui fonctionne également sur une partie du nom.
J'ai ainsi pu retirer rapidement le SUFFixe de mes PDF.
xxxxxyyy.pdf en xxxxx.pdf
Hassen de Tunis