AppleScript : Renommage avec ExifTool date créa des vidéos photos

BellO666

Membre enregistré
28 Octobre 2013
2
0
Bonjour,
J'ai récupérer le script de renommage photos ou vidéos (tout type d'extension) pour renommer les fichiers avec la date Exiftool de création.
Script de : (de 2022)

@zeltron54

Par contre, sur ce script, j'ai une erreur. Si un 'expert' pouvait m'aider. Je comprends la logic, mais pas la technique d'écriture du script.
Je met aussi une image du nommage d'origine des fichiers.
Capture d’écran 2026-02-01 à 14.59.55.webp
L'erreur est : error "Erreur dans Finder : Impossible d’effectuer l’opération car il existe déjà un élément de ce nom." number -48

Et l'erreur est sur la ligne
Bloc de code:
        set name of lefichier to newnom
Je vous en remercie par avance. Sachant que mon but est de récupérer la date création Exif des fichiers vidéos, photos, quelques soient le type (mp4, MOV, jpg, HEIC etc...) pour renommer le fichier avec YYYY_MM_DD-HH_MM_SS-Nom d'origine. extension d'origine

AppleScript:
tell application "Finder"
    set source to choose folder with prompt "Selectionner le dossier Source"
    set dest to choose folder with prompt "Selectionner le dossier  Destination"
   
    make new folder at ((path to desktop folder) as string) with properties {name:"Transfert_tmp"}
    set dossiertmp to (path to desktop folder) & "Transfert_tmp" as string
    set les_fichiers to files of source
    repeat with chaque_fichier in les_fichiers
        duplicate chaque_fichier to dossiertmp
    end repeat
end tell

try
    do shell script "/opt/homebrew/bin/exiftool"
    set exiftool_PATH to "/opt/homebrew/bin/exiftool"
on error
    set exiftool_PATH to "/usr/local/bin/exiftool"
end try

tell application "Finder"
    set Chemin to (path to desktop folder) & "Transfert_tmp" as string
    set Chemin to Chemin as alias
end tell

tell application "Finder"
   
    set les_fichiers to files of Chemin
    repeat with chaque_fichier in les_fichiers
       
        set lefichier to chaque_fichier
        set AppleScript's text item delimiters to {""}
        set nom to name of chaque_fichier
        set chaque_fichier to chaque_fichier as string
        try
            set datephoto to do shell script exiftool_PATH & " -DateTimeOriginal " & quoted form of POSIX path of chaque_fichier
            if datephoto is "" then set datephoto to do shell script exiftool_PATH & " -CreationDate " & quoted form of POSIX path of chaque_fichier
            if datephoto is "" then set datephoto to do shell script exiftool_PATH & " -CreateDate " & quoted form of POSIX path of chaque_fichier
        on error
            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 & "_" & nom
           
           
            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 name of lefichier to newnom
    end repeat
   
end tell


tell application "Finder"
    set source to dossiertmp as alias
    set les_fichiers to files of source
end tell
set test1 to current date
set dernierdossier to ""

repeat with chaque_fichier in les_fichiers
    set lefichier to chaque_fichier as string
    set datephoto to do shell script exiftool_PATH & " -DateTimeOriginal " & quoted form of POSIX path of lefichier
    if datephoto is "" then set datephoto to do shell script exiftool_PATH & " -CreationDate " & quoted form of POSIX path of lefichier
    if datephoto is "" then set datephoto to do shell script exiftool_PATH & " -CreateDate " & quoted form of POSIX path of lefichier
   
   
    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 2 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 ladate to ladate as string
    end if
   
    set datetest to date (lejour & "/" & lemois & "/" & lannee & " " & lheure & ":" & lesminutes & ":" & lessecondes)
    set dif to datetest - test1
   
    tell application "Finder"
        if dif < 1200 then
            set lenom to lannee & "-" & lemois & "-" & lejour
            set dossierdest to ((dest as string) & lenom)
            if dernierdossier is not "" then
                set dossierdest to dernierdossier
            end if
            if not (exists folder dossierdest) then
                make new folder at dest with properties {name:lenom}
            end if
            move lefichier to dossierdest
            set dernierdossier to dossierdest
        else
            set lenom to lannee & "-" & lemois & "-" & lejour
            set dossierdest to ((dest as string) & lenom)
            set numero to 1
            set newnom to lenom
            repeat
                if exists dossierdest then
                    set newnom to lenom & "_" & numero
                    set dossierdest to ((dest as string) & newnom)
                    set numero to numero + 1
                else
                    set lenom to newnom
                    exit repeat
                end if
            end repeat
            make new folder at dest with properties {name:lenom}
            move lefichier to dossierdest
            set dernierdossier to dossierdest
        end if
       
    end tell
    set test1 to datetest
end repeat


tell application "Finder"
    delete dossiertmp
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Dernière édition:
J'ai testé ce script il fonctionne bien. N'aurais-tu pas un dossier dudit nom avec un .tmp qui t'aiderait sur le bureau ? si c'est le cas met le à la poubelle
 
Bonjour,
@BellO666

L'erreur que tu donnes voudrait dire qu"au moment d'enregistrer le fichier avec son nouveau nom il trouve déjà un fichier avec ce nom.

Pour ça je pense que dans le dossier source tu as des sous-dossiers qui contiennent des doubles d'un fichier de 1er niveau.

Ma question dans le dossier source as-tu des fichiers ET des dossiers ?

Sinon précise ce que contiennent exactement les dossiers

Edit:
Curieux je viens de faire plusieurs tests et même avec des doubles je n'arrive pas à reproduire ton erreur. De plus le script ne travaille que sur les fichiers de premier niveau, pas dans les sous-dossiers !!!

De plus en relisant ton message, le script que tu as choisi ne fait pas exactement ce que tu souhaite obtenir.
Il crée dans le dossier de destination autant de dossiers que de dates trouvées avec dedans les photos correspondant à cette date, avec ajout devant le nom existant de YYYY_MM_JJ.
 
Dernière édition: