[R] Renommage en masse par inversion de lettre

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
cortx
Niveau 5
Niveau 5
Messages : 115
Enregistré le : dim. 04 mai 2008 16:10
Status : Hors ligne

[R] Renommage en masse par inversion de lettre

#1

Message par cortx »

Bonjour;

Je souhaiterai que vous me veniez en aide pour un script de renommage de photo en masse.

Je possède un LG Viewty et il n'ont rien trouvé de mieux que de faire un nommage de photo en jj/mm/aa.
Ce qui fait que dans un même dossier les fichiers sont triés par jours, et donc toute les photos du 05 que ce soit janvier avril ou décembre se suivent, et ensuite vienne les photos du 06 etc etc... Bref pas super pour du tri ou du rangement sur un FTP.

Voici un exemple d'un nom de photo; P120509_09.35
Soit Pjjmmaa_hh.mn (Avec; P une lettre fixe, jj le jour, mm le mois, aa l'année, hh l'heure et mn la minute)

Je souhaiterai que les photos soient renommée comme suit:
Paammjj_hh.mm; donc un décalage dans les lettres entre l'année, le mois et le jour.

Si vous souhaitez supprimer le P du début je n'y voit pas d'inconvénient au contraire, il ne correspond à rien et donc ne sert pas au triage.

Informations supplémentaires;
Si une photo est prise à la même date et à la même minute, voici comme elle sont nommé
P120509_09.35 - Pour la première,
P120509_09.35[01] - Pour la seconde,
P120509_09.35[02] - Pour la troisième,
Et ainsi de suite, Il en résulte qu'une photo n'a pas un nombre fixe de caractère, je ne sais pas si ca vous est utile mais comme ca c'est signalé.
Ce nommage me plait assez, il permet de laisser un ordre, donc dans la mesure du possible j'aimerai qu'il soit gardé.

L'extension des fichiers est en JPG (en majuscule) - Pareil, je ne sais pas si ca vous est utile mais bon.

Si il vous faut des informations supplémentaire, il suffit de demander.

Je vous remercie d'avance pour toute l'aide que vous pourriez m'apporter sur la réalisation d'un tel script.

Bonne journée à vous tous.
CortX
Modifié en dernier par cortx le mer. 02 sept. 2009 16:34, modifié 1 fois.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [...] Renommage en masse par inversion de lettre

#2

Message par timmalos »

J'avais deja posté un exemple de renommage en masse.
Va voir dans la partie EXEMPLE et cherche ;) ca peut t'aider pour une grosse partie de ton scrip.

Edit : Bonne poire Aujourd'hui: http://www.autoitscript.fr/forum/viewto ... f=6&t=1506

Après pour le renommage pur, il va falloir utiliser du RegExpReplace() Bon courage
cortx
Niveau 5
Niveau 5
Messages : 115
Enregistré le : dim. 04 mai 2008 16:10
Status : Hors ligne

Re: [...] Renommage en masse par inversion de lettre

#3

Message par cortx »

Merci beaucoup, déjà ca me donne la base pour la modification d'un répertoire.

La suis en train de m'éplucher la liste des fonction à la recherche d'une fonction capable de sortir un nombre de lettre à partir d'un champ donnée.
Je passerai tout ca en variable et apres je reconstruirai le nom et le fichier.

Mon idée est sur la bonne voie ou rien à voir du tout j'y arriverai pas comme ca ?

Edit;

J'ai réussi à trier comme je le souhaite les lettres d'un mot donné.
Par contre j'ai énormément de mal à l'intégrer dans le code que tu m'a fournit (récupération du nom du fichier en cours, replacement du nouveau nom et enregistrement de celui ci).
Est ce que quelqu'un pourrait faire l'intégration pour moi s'il vous plait avec le renommage du fichier, car comme on peux le voir dans mon code je suppose, la programmation et moi ca fait deux, et je fait au plus simple pour ma compréhension.

► Afficher le texte
Merci
Avatar du membre
20100
Niveau 3
Niveau 3
Messages : 43
Enregistré le : ven. 03 juil. 2009 11:39
Status : Hors ligne

Re: [...] Renommage en masse par inversion de lettre

#4

Message par 20100 »

Bon voila comme j'ai pas trop le temps de me pencher sur le StringRegExp, je n'ai pas codé la vérification du nom du fichier afin qu'il respecte bien le pattern que tu nous as donné (Pjjmmaa_hh.mn).

Code : Tout sélectionner

#include <Array.au3>
#Include <File.au3>

Local $directory = "C:\x" ; Repertoire qui contient les images à renommer
Local $jpg_list  = _FileListToArray($directory, "*.jpg", 1) ; Selectionne uniquement les fichiers d'extention *.jpg
Local $rename_current
Local $rename_save = ""

If( IsArray($jpg_list) ) Then
    For $i=1 To $jpg_list[0] Step 1
        
        ; Sauvegarde de l'ancienne nomenclature dans le sous-repertoire "..\savefile_with_oldname"
        FileCopy($directory&"\"&$jpg_list[$i], $directory&"\file_with_oldname\",9)

        ; Vérfication de la nomencalture, ie que le fichier est bien sous la forme "Pjjmmaa_hh.mn.jpg"
        ; Pas fait... On suppose que les fichiers à renommer soit bien sous cette forme.       
        $jour  = StringMid($jpg_list[$i], 2, 2)
        $mois  = StringMid($jpg_list[$i], 4, 2)
        $annee = StringMid($jpg_list[$i], 6, 2)
        $heure = StringMid($jpg_list[$i], 9, 2)
        $min   = StringMid($jpg_list[$i], 12, 2)
        
        ; Ecriture du nouveau nom, on vérifie qu'il n'existe pas déjà
        $rename_current = "P_"&$annee&$mois&$jour&"_"&$heure&"."&$min
        If( $rename_current = $rename_save ) Then
            $rename_current = $rename_current&"_["&$count_string&"]"
            $count = $count+1
            If( $count < 10 ) Then
                $count_string = "0"&$count
            Else
                $count_string = $count
            EndIf
        Else
            $count = 1
            $count_string = "0"&$count
        EndIf
        $rename_save = "P_"&$annee&$mois&$jour&"_"&$heure&"."&$min
        
        FileMove($directory&"\"&$jpg_list[$i], $directory&"\"&$rename_current&".jpg", 9)
    Next
EndIf
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [...] Renommage en masse par inversion de lettre

#5

Message par timmalos »

ARG que c'est pas beau a voir :P

Code : Tout sélectionner

If $count = 1 Then
    $var21=$var
    $var11=$var
        else
        if $count = 2 Then
        $var26=$var
        $var12=$var
            else
            if $count = 3 Then
            $var27=$var
            $var13=$var
                else
                if $count = 4 Then
                $var24=$var
                $var14=$var
                    else
                    if $count = 5 Then
                    $var25=$var
                    $var15=$var
                        else
                        if $count = 6 Then
                        $var22=$var
                        $var16=$var
                            else
                            if $count = 7 Then
                            $var23=$var
                            $var17=$var
                            EndIf
                        EndIf
                    EndIf
                EndIf
            EndIf
        EndIf
    EndIf
Peut doit être remplacer par

Code : Tout sélectionner

Switch $count
    Case 1 
         ...
    Case 2
         ...
    Case 3
         ...
    Case 4
         ...
    Case 5
         ...
    Case 6
         ...
EndSwitch
Ou encore

Code : Tout sélectionner

If $count = 1 ... Then
ElseIf ... Then
ElseIf ... Then
Else
EndIF

Sinon le code de 20100 est très bien. On pourrait remplacer par un Patten, mais si ca marche... :mrgreen:
cortx
Niveau 5
Niveau 5
Messages : 115
Enregistré le : dim. 04 mai 2008 16:10
Status : Hors ligne

Re: [...] Renommage en masse par inversion de lettre

#6

Message par cortx »

Merci beaucoup 20100.
Ça marche à la perfection, et effectivement le code n'a rien à voir avec le mien ;)

Juste pour mon information, quel est la différence entre mon code à ralonge et le second que propose timmalos
Il y aura toujours le même nombre d'instruction, hormis que j'ai décomposé le elseif non ?

En tout cas, un énorme merci pour tout ca.

Edit: Je me suis permis d'apporter deux modifications.
Retirer le _ après le P
Et ensuite pour s'assurer que les fichier pris en compte soit bien les P* j'ai rajouté cela dans la création de la liste.
Malheureusement les fichiers Photoxx étaient aussi pris en compte donc j'ai mis le _ aussi.
JLocal $jpg_list = _FileListToArray($directory, "P*_*.jpg", 1)

Voila c'était juste pour informations.
Encore mille merci.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [...] Renommage en masse par inversion de lettre

#7

Message par timmalos »

Quand un post est résolu, merci de le mettre en éditant votre premier message avec [R]


La seule différence c'est que c'est bien plus propre, et que quand vous voulez que quelqu'un derriere lise votre post, il faut que le code soit propre sinon on aura pas envie et quelque fois on passe au Post suivant ;)
Avatar du membre
20100
Niveau 3
Niveau 3
Messages : 43
Enregistré le : ven. 03 juil. 2009 11:39
Status : Hors ligne

Re: [R] Renommage en masse par inversion de lettre

#8

Message par 20100 »

Juste pour mon information, quel est la différence entre mon code à ralonge et le second que propose timmalos. Il y aura toujours le même nombre d'instruction, hormis que j'ai décomposé le elseif non ?
Heu le temps du COBOLD ou du Basic est désormais révolue, comme le précise timmalos c'est essentiellement pour la lecture de ton code source. Néanmoins pour faciliter la lecture il vaut mieux utiliser du if, elseif, elseif, else. Sinon une petite remarque il vaut mieux utiliser un Switch quand c'est possible afin d'améliorer les performances. En effet une structure en switch est plus performante qu'une structure en elseif car cette dernière doit testé chacune des conditions les unes après les autres et doit donc évalué chaque condition jusqu'à trouvé une correspondance, ce qui n'est pas le cas d'un switch qui permet une sortie plus rapide...
► Afficher le texte
cortx
Niveau 5
Niveau 5
Messages : 115
Enregistré le : dim. 04 mai 2008 16:10
Status : Hors ligne

Re: [R] Renommage en masse par inversion de lettre

#9

Message par cortx »

OK.
Merci.
Répondre