Page 1 sur 1

[..] Renommage de fichier

Posté : sam. 13 juil. 2013 09:25
par cortx
Bonjour;

Je suis en train de créer un script me permettant de renommer mes fichiers en épurant et en formatant son nom.
Mon script vise particulièrement les fichiers de série TV qui sont souvent bourré d'information dont je n'ai pas envie.
Avec ce script je souhaite passer de "nom_de_ma_serie.S01E01.blablabla.720p.xxxxx-yyy.avi" à "nom_de_ma_serie - S01E01.avi"

Voici l'état actuel du script.
► Afficher le texte
Actuellement je suis bloqué sur la partie suivante: Mise en variable du nom de la serie
C'est plus un problème de logique que de codage pour le moment. Je ne vois pas comment extraire une chaine de caractère de longueur variable.
La seule chose qui est connu c'est que c'est "Tous les caractères se trouvant avant le numéro de la série/episode"
Ce numéro de série/episode est souvent défini par SxxExx.
Je pensais donc utiliser un nouveau StringSplit sauf que je suis bloqué étant donné que la série peux etre S0x ou S1x
Et filtrer sur le caractère S est vraiment trop large.

Est ce que quelqu'un à une idée pour solutionner ce souci ?
Est ce que l'un de vous connait une fonction permettant de découper une chaine de caractère avec plus d'option que ce qui est proposé de base ?

Une fois le nom de la série mis en variable ainsi que le numéro de serie/episode, je pourrais ré-écrire complètement le nom via la commande FileMove et tous le reste sera supprimé.

Re: [..] Renommage de fichier

Posté : sam. 13 juil. 2013 10:46
par mikell
Hum
Je me suis déjà trouvé confronté au problème de devoir faire un petit code pour renommer d'un coup les 25 épisodes d'une série nommés par exemple : "[team]_mes.vacances.01_vostfr_[uploader](1280x720){h264}{mp3}[03578952].mp4", le code devant fonctionner pour tous les formats possibles de titres (ce qui impose de devoir mettre certains paramètres en manuel dans la gui)
C'est pas très optimisé mai si ça t'intéresse ...
► Afficher le texte

Re: [..] Renommage de fichier

Posté : sam. 13 juil. 2013 11:26
par cortx
Bonjour;

Merci pour ce 'petit' bout de code.
Je ne saisi pas trop la chaine de caractère RegExp mais ça marche hormis un truc.
Si je ne met que RegExp voici ce que va donner:
film.vacance.japon.2.[FRENCH+SUB] [Bluray 720p].mkv ---> film.vacance.japon.2..mkv
film vacance - 2013 [BDRIP-1080p-VF-AVC-AAC-TT].mkv ---> film vacance - 2013.mkv
Dans le premier cas, les . ne sont pas supprimé, et si je lui dit qu'il doit transformer les . en espace alors là il ne veux rien faire du tout.
Dans le second il reste la chaine ' - 2013' car elle n'est pas entre crochet.

Ceci dit ma démarche de création me permet surtout de pousser un peu plus ma compréhension du codage avec des exemples concret.
Donc si toi ou d'autre avez des info sur mon code je suis preneur.
A vrai dire je commence à avoir un petit tas de cheveu sur le bureau tellement ça m'énerve de ne pas arriver à faire ce que je veux.
Je vais finir par retourner utiliser filebot (que je conseille d’ailleurs pour renommer série et film en s'appuyant sur une base de donnée) mais bon c'est pas drôle si ca ne sent pas la sueur.

Re: [..] Renommage de fichier

Posté : sam. 13 juil. 2013 12:54
par mikell
C'est clair que le renommage ne se fait pas en un seul clic
Par exemple pour "film.vacance.japon.2. - 2013[FRENCH+SUB] [Bluray 720p].mkv" il faut 2 clics ^^
1 - remplacer " - 2013" par rien et remplacer les points par des espaces
=> film vacance japon 2 [FRENCH+SUB] [Bluray 720p] mkv
2 - brancher le regex, laisser telle quelle la 1ère ligne d'inputs, et dans la 2ème remplacer "mkv" par ".mkv"
=> film vacance japon 2.mkv
J'ai préféré cette formule pour sa souplesse, maintenant pour ton code les réponses à tes questions sont pour la plupart écrites dans mon script

Re: [..] Renommage de fichier

Posté : sam. 13 juil. 2013 14:09
par Tlem
Bien que pour un tas de chose, un script AutoIt suffit, je me suis rendu compte qu'à la longue, faire un script pour tel cas et puis un autre pour tel autre cas, etc ... devenait à la longue assez frustrant.
Donc plutôt que de ré-inventer la roue sans cesse, j'ai opté pour quelque chose de gratuit, performant et très complet : http://www.antp.be/software/renamer/screenshots/fr

Re: [..] Renommage de fichier

Posté : sam. 13 juil. 2013 15:10
par mikell
Et Thierry qui s'imagine que je ne sais pas chercher "file renamer" dans gougle :mrgreen:
Je me suis fait ce code parce qu'il correspond précisément à ce que je veux, sans installer quoi que ce soit et sans fonctionnalités superflues
Pourquoi se procurer 50 roues quand on n'a besoin que d'une seule ? :roll:

Re: [..] Renommage de fichier

Posté : sam. 13 juil. 2013 21:42
par Tlem
Ma réflexion était destinée à cortx mon cher Michel ...

Re: [..] Renommage de fichier

Posté : sam. 13 juil. 2013 21:55
par mikell
Mais oui certes certes mon cher Thierry :mrgreen:
Toutefois ma remarque vaut aussi pour ce que lui cherche à faire (enfin je suppose...)

Re: [..] Renommage de fichier

Posté : sam. 13 juil. 2013 22:11
par cortx
Bonjour;

J'utilise Ant Renamer depuis un bon moment mais je cherchais à faire quelque chose par moi-même pour le 'challenge' de le faire par moi-même juste pour m'améliorer.
C'était pour apprendre à gérer et manier les chaines de caractères et pour en faire quelque chose d'utile que j'utilise presque quotidiennement.

Là avec Ant Renamer il faut passer par une phase d'apprentissage des différents mots à supprimer.

De mon coté le fait de sortir le nom et numéro de saison/série permettrai d'un coup d'un seul de tout supprimer quel que soit le nommage en cours, le nombre de caractères etc.

Mais merci en tout cas de vous être penché sur le problème.

Re: [..] Renommage de fichier

Posté : sam. 13 juil. 2013 22:38
par mikell
cortx a écrit :Est ce que l'un de vous connait une fonction permettant de découper une chaine de caractère avec plus d'option que ce qui est proposé de base ?
Oui, les expressions régulières sont faites exactement pour ça
Mais comme ton 2ème exemple n'a pas grand'chose à voir avec le 1er (les SxxExx ont disparu et les "_" sont remplacés par des ".") j'en conclus que les formats d'entrée peuvent être assez variés, ce qui condamne le StringSplit et impose du regex
Avant d'écrire un tel regex il faut d'abord définir clairement tous les cas de figure possibles (sinon l'expression ne sera pas polyvalente) et c'est ça qui n'est pas évident

Re: [..] Renommage de fichier

Posté : dim. 14 juil. 2013 05:25
par cortx
Je viens de me lever et je part bosser donc j'ai pas trop le temps de chercher, je note juste ma réflexion du moment j'y reviendrai plus tard.
Est-ce qu'avec un regex on peux 'trouver' la chaine de caractere contenant SxxEyy ? (Ça je suppose que oui)
Et à partir de là il 'suffirait' de dire, ce SxxEyy tu l'isole en variable et tout ce qu'il y a avant tu l'isole dans une seconde. (Ce qui nécéssite d'arriver à trouver un système permettant de définir un fois le SxxEyy isolé en quel position de caractère il commencais.
Il y a une fonction je crois qui permet de compter le nombre de caractère dans une chaine, je verrai si il existe la même chose un peu plus poussé pour les position.
Ce qui ne laisserai plus que le nom de et le SxxEyy pour travailler.

****

Autre réflexion.
Si on découpe toute la chaine caractère par caractère dans un tableau à raison d'un caractère par ligne de tableau.
Est-ce qu'il est possible de savoir si le caractère dans une cellule est un caractère alphabétique ou bien un numéro.
Si oui on passe en revue cellule par cellule et si on trouve un numéro, on regarde si la ligne d'avant est une lettre S
Dans ce cas on obtient une position, ce qui nous permet ensuite de reformer le texte comme on veux en tenant compte de cette position (On connait donc le nombre de caractère contenant le titre)
If cellule = 1,2,3,4,5,6,7,8,9,0 then
If cellule_précédente = S then
......

m.... suis à la bourre pourle boulot à plus mais je pense que c'est à travailler ce systeme de tableau ça me plait bien au moins dans l'idée.

Re: [..] Renommage de fichier

Posté : dim. 14 juil. 2013 07:55
par Tlem
Bonjour.
Avec le système des expressions régulières, il est inutile de ce prendre la tête autant.
Si vous recherchez une chaîne du genre SxxEyy alors la chaîne vous sera retournée.

Si vous voulez renommer un truc du genre 'serie.machin.truc.S01E02.fr.tartenpion.avi' en S01E02.avi, ca va être plutôt simple, malheureusement, il faut prendre en considération divers autres paramètres.

Que va t'il se passer si vous avez :
- 'serie.machin.truc.S01E01-02.fr.tartenpion.avi'.
- 'serie.machin.truc.S01E02.fr.tartenpion.avi' et 'serie.machin.chose.S01E02.fr.tartenpion.avi'.

Le système de l'expression régulière est extrêmement puissant, mais il faut être précis et il faut prévoir les différents cas possibles avant le clash.

Re: [..] Renommage de fichier

Posté : dim. 14 juil. 2013 09:26
par cortx
Le souci c'est que si j'ai 'serie.machin.truc.S01E01.fr.tartenpion.avi
Je ne veux pas le renommer en 'S01E01' mais en 'machin truc - S01E01.avi'
Il faut donc que j'arrive à récupérer la chaine de caractère se trouvant avant le S01E01 pour la traiter afin d'en retirer les élément indésirable tel que les . ou les _
Tout le reste peut être supprimé.

Re: [..] Renommage de fichier

Posté : dim. 14 juil. 2013 12:18
par mikell
Hum il ya des trucs que tu pourras automatiser, d'autres non
Avec ton dernier exemple

Code : Tout sélectionner

$txt = 'serie.machin.truc_S01E01.fr.tartenpion.avi'

$episode = StringRegExpReplace($txt, "(?i).+?(S\d\dE\d\d).+", "$1")
$nom = StringRegExpReplace($txt, "(.+?)" & $episode & ".+", "$1")
$nom2 = StringRegExpReplace($nom, '([_\.])', " ")
$ext = StringRegExpReplace($txt, '.+(\.\w+?)', "$1")

msgbox(0,"", $txt &@crlf& $nom2 &"- "& $episode & $ext)
Le gros problème est de virer "serie"
En effet comment faire pour 'ma.serie.machin.truc_S01E01.fr.tartenpion.avi' ?
La machine ne peut pas deviner, donc c'est pour cette opération qu'il te faudra une intervention manuelle pour lui expliquer que dans un cas il faut virer 1 mot et dans l'autre 2

Re: [..] Renommage de fichier

Posté : dim. 14 juil. 2013 12:51
par cortx
Au pire si il n'y à que ça c'est pas trop grave.
Je n'ai d'ailleur pas souvenir d'avoir vu autre chose que le nom de la serie avant le numéro de saison.

Donc même si il garde tout avant le SxxEyy ça me va quant même.

Re: [..] Renommage de fichier

Posté : lun. 15 juil. 2013 14:18
par Sunwo
Astuce : il existe une appli dédié à ce genre de chose : Ants Renamer.

Existe en version portable.

Une fois paramétré en 3 cliques je renomme des dossiers complets

Re: [..] Renommage de fichier

Posté : lun. 15 juil. 2013 14:43
par mikell
Prière de bien lire les sujets avant d'y répondre ...
http://www.autoitscript.fr/forum/viewto ... 504#p79504

Re: [..] Renommage de fichier

Posté : jeu. 18 juil. 2013 11:21
par jguinch
J'arrive un peu après la guerre, mais bon.
[quote=Mikell a écrit]Je me suis déjà trouvé confronté au problème de devoir faire un petit code pour renommer d'un coup les 25 épisodes d'une série nommés[/quote]
266 lignes de code pour renommer 25 épisodes... :lol: :lol:
Cela dit, c'est sympa.

Perso, je liste les fichiers avec dir /b > list.txt, puis j'ouvre le fichier list.txt dans Notepad++ et j'utilise les expressions régulières pour faire des remplacements, jusqu'à obtenir un batch qui renomme les fichiers... Du coup, je vais utiliser Ant Renamer...

Re: [..] Renommage de fichier

Posté : jeu. 18 juil. 2013 19:11
par mikell
jguinch a écrit :266 lignes de code pour renommer 25 épisodes...
Heu pas tout à fait... mon HD series-dedicated contient ~250 dossiers :mrgreen:
Et comme en matière de renommage cette unique petite gui permet de faire absolument tout, pas besoin d'un bazar tout plein de fonctionnalités que j'utiliserai jamais ^^