Regrouper et renommer fichiers selon conditions

springfield

Membre confirmé
18 Novembre 2015
26
0
Bonjour,

Dans le cadre de mon activité professionnelle, je reçois un grand lot de fichiers images qui sont présentés comme l'exemple suivant :
+ [Dossier] 236178
++ [Sous-Dossier] XXX
+++ [Fichier] 1234 - Description.ext

J'ai deux problématiques à résoudre :
  • Le nom du fichier image doit être renommer en prenant la référence du premier dossier.
  • Regrouper tous les fichiers à la racine ou dans un même dossier sans les deux niveaux de dossiers.
A votre avis, est-ce possible à réaliser ? Et si oui, comment dois-je procéder ?
 
Bonjour,

Voici un script AppleScript de départ:

Je suppose que la référence du premier dossier est son nom au complet.
Je suppose qu'il faut renommer l'image avec la référence seulement et l'extension de l'image (donc, ne pas ajouter la référence dans le nom de l'image).
Je suppose qu'il n'y a qu'un seul sous-dossier et que ce sous-dossier ne contient qu'un seul fichier (l'image).
Et je suppose qu'il n'y aura pas d'images ayant le même nom dans le dossier racine, sinon le script s'arrêtera et affichera une erreur lors de la tentative de déplacement de l'image

Lors de l'exécution du script, un dialogue s'affichera, il suffit de sélectionner un dossier ou plusieurs dossiers.​

AppleScript:
set cesDossiers to choose folder with prompt "Sélectionnez le(s) dossier(s) qui contient une  image à renommer et à déplacer." with multiple selections allowed

tell application "Finder"
    repeat with ceDossier in cesDossiers
        tell item ceDossier
            set {dParent, nomD} to {its container, its name} -- récupère le dossier parent et le nom de ce dossier
            tell (document file 1 of folder 1) to if exists then -- récupère l'image dans le sous-dossier
                set l_ext to name extension -- récupère l'extension de l'image
                set name to nomD & "." & l_ext -- renomme l'image
                move it to dParent -- déplace l'image dans le dossier parent du premier dossier
              
            end if
            delete it -- supprime le dossier et son contenu (le sous-dossier et son contenu), ils seront dans la corbeille
        end tell
    end repeat
end tell
 
  • J’aime
Réactions: aurique
Bonsoir,

Merci beaucoup pour votre aide. Votre code fonctionne dans 98% des cas et réduit considérablement le temps de traitement.
 
Bonjour,

Est-ce possible de modifier le script pour quand le dossier contient plusieurs fichiers, les fichiers soient suivi d'un suffixe _2, _3, _4 ? (actuellement, ces dossiers sont ignorés du traitement)

Merci.
 
Bonjour,

Est-ce possible de modifier le script pour quand le dossier contient plusieurs fichiers, les fichiers soient suivi d'un suffixe _2, _3, _4 ? (actuellement, ces dossiers sont ignorés du traitement)

Oui, c'est possible, voici le script:
Bloc de code:
set cesDossiers to choose folder with prompt "Sélectionnez le(s) dossier(s) qui contient une  image à renommer et à déplacer." with multiple selections allowed

tell application "Finder"
    repeat with ceDossier in cesDossiers
        tell item ceDossier
            set {dParent, nomD} to {its container, its name} -- récupère le dossier parent et le nom de ce dossier
            set i to 1
            if exists document file 1 of folder 1 then -- il y a au moins un fichier dans le sous-dossier
                repeat with f in (document files of folder 1 as alias list) -- boucle sur les images dans le sous-dossier (fonctionne aussi pour un seul fichier)
                    set l_ext to name extension of f -- récupère l'extension de l'image
                    if i = 1 then
                        set name of f to nomD & "." & l_ext -- renomme l'image (le premier fichier)
                    else
                        set name of f to nomD & "_" & i & "." & l_ext -- renomme l'image (le deuxième fichier et les suivants )
                    end if
                    move f to dParent -- déplace l'image dans le dossier parent du premier dossier
                    set i to i + 1
                end repeat
            end if
            delete it -- supprime le dossier et son contenu (le sous-dossier et son contenu), ils seront dans la corbeille
        end tell
    end repeat
end tell