Transformer un script (de renommage) pour Photos en script pour Finder

8enoit

Membre actif
27 Avril 2006
100
3
Liège.be
Hello,
Voici un script pour Photos qui me sert à renommer en paquets des photos avec la date à l'envers suivie d'un nom et une numérotation (il y a une question qui précède le script pour donner le nom)
J'aurais voulu le même pour renommer mes photos dans le Finder. Je dois donc modifier la fin du script pour l'adapter. N'y connaissant quasiment rien en AS, je sollicite votre aide. D'avance merci.
J'ajoute une capture du script incrusté dans Automator.

Bloc de code:
on run {input, parameters}
    set Ninput to input
   
    set n_digits to 3 -- how many digits for the appended number
    set answer to display dialog "Donner le nombre de chiffres (entre 0 et 10) pour les numéros ajoutés au titre.
NB : Sélectionner '0' supprimera les zéros en préfixe" default answer n_digits
    set n_digits_text to the (text returned of answer)
    try
        set n_digits to n_digits_text as number
    on error -- gestion de l'erreur si nombre de digits saisi est incorrect
        set n_digits to 3
    end try
   
    set Mycounter to 1 -- définit le nombre de départ
    set answer to display dialog "Donner le chiffre de départ" default answer Mycounter
    set Mycounter to the (text returned of answer)
    try
        set Mycounter to Mycounter as number
    on error -- gestion de l'erreur si Mycounter saisi est incorrect
        set Mycounter to 1
    end try
   
    tell application "Photos"
        activate
        set imageSel to (get selection) -- get selected images
        repeat with next_image in imageSel
            set ntext to "0000000000" & Mycounter
            set ntext to text -(n_digits) thru -1 of ntext -- ajuste le compteur sur n_digits
            set myDate to (date of next_image) -- extrait la date de l'image
            tell me to set Sdate to reverseDate(myDate) -- convertit la date en aaaa-mm-jj via la "sub routine" définie en bas du script
            set capture_time_string to the time string of myDate -- extrait l'heure de l'image
            set new_title to Sdate & " " & capture_time_string & " " & Ninput & "_" & ntext -- défini le nouveau titre =date-heure-input-compteur
            set the name of next_image to new_title as text
            set Mycounter to Mycounter + 1
        end repeat
    end tell
end run

on reverseDate(LDate) -- renvoie la date sous forme aaaa-mm-jj
    set SD to text -2 thru -1 of ("00" & (day of LDate))
    set SM to text -2 thru -1 of ("00" & ((month of LDate) as integer))
    return ((year of LDate) as text) & "-" & SM & "-" & SD
end reverseDate

Capture d’écran 2022-05-26 à 11.01.14.png
 

lepetitpiero

Membre expert
Club MacG
20 Août 2005
8 834
511
50
Pourquoi ne pas utiliser Automator et créer un Service ? Je te joint un service à mettre dans le dossier Service de la bibliothèque utilisateur ensuite pour l'utiliser tu sélectionne tes photos clic droit renommer ( les photos seront renommer par date de création en plus du nom du fichier) tu peux si tu le veux, via automator modifier ce service.

 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 510
399
Lorraine
Bonjour,

La solution de @lepetitpiero est la plus simple, mais elle utilise comme date, la date de création du fichier, pas la date de la prise de vue de la photo.

Autre petit problème, le nom de la photo (dans l'application photo) peut contenir le caractère ":" qui est utilisé par ton script comme séparateur dans l'heure. Il ne peut pas être utilisé dans le Finder. Il te faudra donc choisir un autre séparateur
Exemple de nom:
Dans photo --> 2022-05-26 18:21:35 Nom du fichier_001
Dans le finder--> 2022-05-26 18-21-35 Nom du fichier_001

Si tu me donnes le séparateur choisi je pourrai te faire un script, mais il faudra d'abord installé l'application Exiftool à télécharger là: https://exiftool.org/
Cette application sert à récupérer les donnés exif de la photo.

Il existe aussi des applications (payantes) comme "A Better Finder Rename"
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 510
399
Lorraine
Bonjour,

Je te propose de créer un script qui:
-Remplace la date de création du fichier par la date de la prise de vue
- Renomme le fichier avec la date au format AAAA-MM-DD HH-MM-SS suivi du nom, suivi du numéro ce qui donne:

AAAA-MM-DD HH-MM-SS NOM SAISIE_Numéro.extension

Pour le nom il utilise soit le nom saisie, soit le nom existant (si pas de saisie), soit aucun (saisie d’un espace) (uniquement la date et le numéro)
pour le numéro, choix du nombre de chiffre ainsi que du numéro de départ.


A son lancement le script te demande de choisir le dossier à traiter, le nom de fichier à utiliser, le nombre de chiffre et le numéro de départ.
Il renomme TOUS le fichiers contenus dans le dossier et SES SOUS-DOSSIERS.

Si un fichier ne possède pas de date alors un fichier “les erreur.txt” est créé sur le bureau contenant la liste des fichiers non traités.
Il met un message de fin lorsque le traitement est terminé.

Dis moi si cela te convient, ou si il faut apporter quelques modifications ?
 

8enoit

Membre actif
27 Avril 2006
100
3
Liège.be
Pourquoi ne pas utiliser Automator et créer un Service ? Je te joint un service à mettre dans le dossier Service de la bibliothèque utilisateur ensuite pour l'utiliser tu sélectionne tes photos clic droit renommer ( les photos seront renommer par date de création en plus du nom du fichier) tu peux si tu le veux, via automator modifier ce service.

Toutes mes excuses, le lien WT est expiré… peux-tu me le renvoyer?
 

zeltron54

Membre expert
Club MacG
29 Mars 2008
2 510
399
Lorraine
Bonjour,

Je t'ai fais un applescript.
Il faut d'abord installer https://exiftool.org/ version 12.42
faire un copier, coller du script ci-dessous dans l'éditeur de script.
Utilisation suivant le post #4
Dis moi s'il faut modifier quelque chose !

Bloc de code:
-- remplace date du fichier par la date exif creation et renomme les fichiers avec la date de création plus nom plus numéro

tell application "Finder"
    set Chemin to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à redater"
   
    set answer to display dialog "Entrer le nom à ajouter après la date.
NB : Si aucun nom n'est saisie le nom existant sera utilisé.
NB : La saisie d'un espace donnera un titre avec la date suivi du numèro" default answer ""
    set nomsaisie to the (text returned of answer)
   
    set n_digits to 3 -- how many digits for the appended number
    set answer to display dialog "Donner le nombre de chiffres (entre 0 et 10) pour les numéros ajoutés au titre.
NB : Sélectionner '0' supprimera les zéros en préfixe" default answer n_digits
    set n_digits_text to the (text returned of answer)
    try
        set n_digits to n_digits_text as number
    on error -- gestion de l'erreur si nombre de digits saisi est incorrect
        set n_digits to 3
    end try
   
    set Mycounter to 1 -- définit le nombre de départ
    set answer to display dialog "Donner le chiffre de départ" default answer Mycounter
    set Mycounter to the (text returned of answer)
    try
        set Mycounter to Mycounter as number
    on error -- gestion de l'erreur si Mycounter saisi est incorrect
        set Mycounter to 1
    end try
   
    my inspecter(Chemin, n_digits, Mycounter, nomsaisie)
end tell

on inspecter(un_dossier, n_digits, Mycounter, nomsaisie)
    tell application "Finder"
        -- traitement des fichiers :
        set les_fichiers to files of un_dossier
        repeat with chaque_fichier in les_fichiers
            -- traitement d'un fichier
           
            set lefichier to chaque_fichier
            set AppleScript's text item delimiters to {""}
            set nom to name of chaque_fichier --récupère le nom du fichier
            set extens to document file nom in un_dossier --recupere l extension du fichier
            set lextension to name extension of extens
            set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
            set AppleScript's text item delimiters to {"."} --récupère la partie avant le dernier "."
            set elements to text items of nom
            set nomcourt to (items 1 thru -2 of elements) as string
            set ancien_nom to nomcourt
            set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
           
            set chaque_fichier to chaque_fichier as string
           
            try
                set datephoto to do shell script "/usr/local/bin/exiftool -DateTimeOriginal " & quoted form of POSIX path of chaque_fichier
                if datephoto is "" then set datephoto to do shell script "/usr/local/bin/exiftool -CreationDate " & quoted form of POSIX path of chaque_fichier
                if datephoto is "" then set datephoto to do shell script "/usr/local/bin/exiftool -CreateDate " & quoted form of POSIX path of chaque_fichier
               
            on error
                -- Ecrit un fichier erreur sur le bureau si erreur chargement date
                set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                write "Le fichier ne contient pas de date  : " & chaque_fichier & return to lelog starting at eof
                close access lelog
               
                set datephoto to ""
            end try
           
            if length of datephoto > 20 then
                set x to (length of datephoto) - 33
                set DateOriginale to text -x thru -1 of datephoto
                set ladate to text 1 thru 5 of DateOriginale
                set lannee to ladate
                set ladate to ladate & text 7 thru 8 of DateOriginale
                set lemois to text 7 thru 8 of DateOriginale
                set ladate to ladate & text 10 thru 11 of DateOriginale
                set lejour to text 10 thru 11 of DateOriginale
                set ladate to ladate & text 13 thru 14 of DateOriginale
                set lheure to text 13 thru 14 of DateOriginale
                set ladate to ladate & text 16 thru 17 of DateOriginale
                set lesminutes to text 16 thru 17 of DateOriginale
                set ladate to ladate & "." & text 19 thru 20 of DateOriginale
                set lessecondes to text 19 thru 20 of DateOriginale
                set newnom to lannee & "-" & lemois & "-" & lejour & " " & lheure & "-" & lesminutes & "-" & lessecondes
               
                set xxx to ladate as string
               
                if xxx is " 000000000000.00" then
                    -- Ecrit un fichier erreur sur le bureau si erreur chargement date(=0000...)
                    set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                    write "Le fichier ne contient pas de date : " & chaque_fichier & return to lelog starting at eof
                    close access lelog
                else
                    do shell script "touch -t " & ladate & " " & quoted form of POSIX path of chaque_fichier
                end if
            end if
           
           
            set aa to container of lefichier as string
            set numero to 1
            if nomsaisie is "" then
                set lenewnom to newnom & " " & ancien_nom & "_"
            else
                if nomsaisie is " " then
                    set lenewnom to newnom & "_"
                else
                    set lenewnom to newnom & " " & nomsaisie & "_"
                end if
            end if
            repeat
                if exists aa & lenewnom & "." & lextension then
                    set lenewnom to newnom & "(" & numero & ")"
                    set numero to numero + 1
                else
                    set newnom to lenewnom
                    exit repeat
                end if
            end repeat
           
            set ntext to "0000000000" & Mycounter
            set ntext to text -(n_digits) thru -1 of ntext -- ajuste le compteur sur n_digits
            set newnom to newnom & ntext & "." & lextension
            set name of lefichier to newnom
            set Mycounter to Mycounter + 1
        end repeat
       
        -- traitement des dossiers :
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            -- traitement d'un dossier
            my inspecter(chaque_dossier, n_digits, Mycounter)
        end repeat
    end tell
   
end inspecter
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
  • J’aime
Réactions: 8enoit