Déplacer des fichiers dans des dossiers existants

raphaelrs1

Membre confirmé
13 Novembre 2019
13
0
34
Bonjour,

Je chercher à créer une action Automator qui consiste à ranger des fichiers dans différents dossiers en fonction des éléments qu'ils contiennent.

Capture d’écran 2019-11-13 à 22.52.54.png

Mon process se fait comme suit, à savoir que je récupère les éléments du Finder qui m'intéressent, applique le filtre, puis les déplace dans le dossier concerné. Cette boucle se répétant X fois en changeant X fois les paramètres.

Mon problème intervient au moment où la recherche d'élément retourne un résultat nul. Le fenêtre suivante s'affiche :

Capture d’écran 2019-11-13 à 22.53.01.png

Après l'apparition de cette fenêtre, le processus stoppe.

Je voudrais qu'Automator passe outre cette erreur et continue à trier en fonction des conditions suivantes. En cherchant un peu j'ai vu qu'il fallait certainement que je passe par Applescript pour y imposer mes conditions, mais je n'y connais absolument rien.

Si quelqu'un peut m'épauler ?

En vous remerciant,
 
Dernière édition par un modérateur:
Bonjour,

Je ne connaît pas bien automator, et je ne vois pas de solution simple à ton problème avec ce logiciel.

Le mieux serais de tout faire en applescript. pour cela il faudrait avoir un peu plus d'éléments ...

Tu as un dossier avec plusieurs sous-dossiers contenant chacun ou pas, des fichiers à trier.
Il faut donc connaître les critères de tri, (sur le nom, sur l'extension ou ...?) et déplacer ces fichiers dans des dossiers respectifs reconnaissables à leurs noms ou ...?

Pour établir la liaison entre fichiers et dossiers, on peut soit l'écrire en dur dans le script, soit faire un petit fichier texte qui décrit les liaisons...

Si tu me fournis ces infos, je peux essayer de te préparer ce script.
 
Bonjour,

Merci pour ta réponse.

J'ai un dossier qui contient tous les éléments à trier (pas de sous-dossier)
Disons qu'il se trouve sous : Raphael\Dropbox\Fiches à trier

A l'intérieur il y a des fichiers de ce type :
20191110 - NOM1 Prénom1 - Patient1.pdf
20191110 - NOM2 Prénom2 - Patient2.pdf
20191110 - NOM1 Prénom1 - Patient3.pdf
20191110 - NOM3 Prénom3 - Patient4.pdf
20191110 - NOM3 Prénom3 - Patient5.pdf

Je veux que :
- tous les fichiers contenant les mentions NOM1 Prénom1 aillent dans le dossier Raphael\Dropbox\Fiches\NOM1 Prénom1
- tous les fichiers contenant les mentions NOM2 Prénom2 aillent dans le dossier Raphael\Dropbox\Fiches\NOM2 Prénom2
- tous les fichiers contenant les mentions NOM3 Prénom3 aillent dans le dossier Raphael\Dropbox\Fiches\NOM3 Prénom3

Le problème avec Automator ici, par exemple, si dans le dossier source initial, il ne trouve aucun fichier contant NOM2 Prénom2, il n'ira pas trier les fichiers contenant NOM3 Prénom3 et ainsi de suite.

Meci,
 
Voilà un tout petit script qui déplace tes fichiers.
A VERIFIER ligne 1 et 2 que les chemins du dossier fiches à trier et du dossier fiches (contenant les dossiers patients) soient bon et avec le format MACOS (complet avec séparateur ":" ).
J' ai ajouté un commentaire à la fin de chaque ligne expliquant ce qu'elle fait.

Bloc de code:
set chemin to "Macintosh HD:Users:Raphael:Dropbox:fiches à trier:" as alias -- chemin du dossier à trier

set destination to "Macintosh HD:Users:Raphael:Dropbox:fiches:" -- chemin de dossier destination
tell application "Finder"
    set les_fichiers to files of chemin --récupère tous les fichiers à trier
    repeat with chaque_fichier in les_fichiers --répète avec chaque fichier trouvé
        set le_fichier to name of chaque_fichier as string --récupère le nom du fichier
        set lenom to word 2 of le_fichier -- extrait le nom
        set leprenom to word 3 of le_fichier -- extrait le prenom
        set ladestination to destination & lenom & " " & leprenom & ":" as string -- fabrique le chemin du dossier destination
        set original to chemin & le_fichier as string -- fabrique le chemin du fichier en cours
        move original to ladestination -- déplace le fichier
    end repeat
    
    display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"} -- préviens fin du script
end tell
 
Merci, j'ai voulu essayer mais je n'y arrive pas du tout, j'ai tapé ceci dans Applescript via Automator.
D'autre part, j'ai l'impression que ce script crée à chaque fois un nouveau dossier. Ce n'est pas ce que je souhaite, les fichiers doivent partir dans des dossiers existants.


on run {input, parameters}

set chemin to "Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Édition:Fiches à trier:" as alias
set destination to "Macintosh D:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Édition:"
tell application "Finder"
set les_fichiers to files of chemin
repeat with chaque_fichier in les_fichiers
set le_fichier to name of chaque_fichier as string
set lenom to MBAPPE of le_fichier
set leprenom to Kylian of le_fichier
set ladestination to destination & lenom & " " & leprenom & ":" as string
set original to chemin & le_fichier as string
move original to ladestination
end repeat
display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"}

return input
end run



On va essayer autrement et je vais tenter de donner le max d'informations

Les fichiers à trier se trouvent ici :
Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Édition:Fiches à trier:

Dans ce dossier se trouvent les fichiers suivants :
20191015 - MBAPPE Kylian - NEYMAR.pdf
20191015 - Cabinet du PSG - MBAPPE Kylian - NEYMAR.pdf
20191112 - VARANE Raphael - SERGIO.pdf
20191113 - VARANE Raphael - RAMOS.pdf
20191113 - LAMA Bernard - MANDANDA.pdf
20191114 - MATUIDI Blaise - RONALDO.pdf

Les fichiers contenant MBAPPE Kylian doivent aller dans le dossier Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:MBAPPE Kylian:Fiches de traçabilité:2019:

Les fichiers contenant Cabinet du PSG MBAPPE Kylian doivent aller dans le dossier Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:Cabinet du PSG:Fiches de traçabilité:MBAPPE Kylian:2019: (attention ici car il faudra appliquer un ordre de tri)

Les fichiers contenant LAMA Bernard doivent aller dans le dossier Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:LAMA Bernard:Fiches de traçabilité:2019:

Les fichiers contenant MATUIDI Blaise doivent aller dans le dossier Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:MATUIDI Blaise:Fiches de traçabilité:2019:

Les fichiers contenant VARANE Raphael doivent aller dans le dossier Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:VARANE Raphael:Fiches de traçabilité:2019:

et ainsi de suite

Si un jour par hasard, il n'y a pas de fichier contenant MBAPPE Kylian, le script doit continuer et trier les autres noms.

Est-ce que cela te semble plus clair ?
 
Le script que je t'ai mis ne ce sert pas d'automator, il est autonome.
Donc à copier tel quel dans l'éditeur de script qui se trouve dans application--> Utilitaires.

Si tu as des problèmes pour renseigner le chemin tu peux
remplacer la 1ere ligne en tapant:
set chemin to POSIX file "
puis tu fais un glisser déposé de ton dossier fiches à trier puis à la suite tu tapes:
" as alias

Remplacer la 2ieme ligne en tapant:
set chemin to POSIX file "
puis tu fais un glisser déposé de ton dossier Edition puis à la suite tu tapes:
" as alias

Ceci seulement si tu as des problèmes pour indiquer le chemin.

Ensuite ce script s'utilise en cliquant sur la petite flêche en haut à gauche marquée Exécuter.

C' est tout !

Si tout fonctionne on verra comment en faire un exécutable.
 
Alors je viens de tester. Il retourne un message d'erreur dès le premier fichier analysé même si le nom / prénom sont bien présents dans le nom du fichier
 
En relisant tes chemins je viens de voir qu'il y a 2 sous-dossiers (Fiches de traçabilité:2019:)
le script actuel est prévu pour copier dans le dossier (Nom prenom)
donc il faudra modifier le script pour qu'il ajoute ces 2 sous-dossier au chemin de la destination.
 
Il est un peu tard pour moi.
Si tu es libre demain avec un peu de temps on fera quelques tests pour voir d'ou vient l'erreur, car chez moi ça fonctionne.

Fais signe sur ce post
 
Bonjour,
Après analyse de ton post.

1 - le chemin destination écrit dans ton script est différent de celui donné dans tes explications :
...... Fiches de traçabilité:Édition:" dans le script
.....Fiches de traçabilité:Dentistes:" dans les explications

2- Autre incompatibilité tu dis: (Les fichiers contenant MBAPPE Kylian doivent aller dans le dossier Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:MBAPPE Kylian:Fiches de traçabilité:2019:)
et (Les fichiers contenant Cabinet du PSG MBAPPE Kylian doivent aller dans le dossier Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:Cabinet du PSG:Fiches de traçabilité:MBAPPE Kylian:2019:)

Lors du contrôle le script va trouvé (MBAPPE Kylian) dans les 2 fichiers donc ?


mes questions:
1 - Dans les fichiers , le nom prénom sont t' ils toujours en 2 mots et placés juste après (20191015 -)
2 - Tu as 2 fichiers (20191112 - VARANE Raphael - SERGIO.pdf et 20191113 - VARANE Raphael - RAMOS.pdf) doivent ils aller tous les 2 dans le même dossier ?
3 - les fichiers (Cabinet du PSG...) ce nom est' il toujours en 3 mots ou ??? et y a t' il d'autre nom à traiter différemment du nom patient ?
4 - le dossier de destination est nommé 2019 ? que se passera t' il en 2020 ?

Ces questions, parce que le script balaye le dossier des fichiers, et pour chaque fichier il récupère le 2ieme et 3ieme mot du nom du fichier, qui sont les nom et prénom du patient, puis fabrique le chemin de destination en ajoutant à la fin du chemin renseigné au début, ce nom, prénom et de plus maintenant il faudra ajouter :)Fiches de traçabilité:2019:)
Par contre pour les fiches (Cabinet du PSG), il va trouver comme nom et prenom (cabinet du) !

Il faut donc être sur de ce qu'il va pouvoir trouver (y a t'il d'autre nom possible juste après le 20191015 -) ?

Voilà, Beaucoup de questions mais nécessaire si on veux bien prendre en compte tous les cas de figure .
 
Dernière édition:
Bonjour zeltron

Afin d'échapper la conversion des :) en :) => je te suggère le procédé suivant :

- tu inscrits à la main la balise [plain] (crochets compris) en tête de ton texte (juste avant donc : Après analyse de ton post.) & tu inscrits à la main la balise [/plain] (crochets compris) à la fin de ton texte (juste après donc : tous les cas de figure .)​
 
Dernière édition par un modérateur:
[Note : j'ai édité mon message en BB code => afin que les balises citées puissent apparaître à l'affiche sans exercer d'action.]
 
Coucou macomaniac
:coucou:

Merci pour l 'astuce . Bonne journée à toi ;)
 
Je viens de refaire un nouveau script qui tiens compte des nouvelles infos concernant les chemins et du dossier (cabinet du xxx)
Restera le problème du dossier 2019 (en 2020)

A tester

Bloc de code:
set chemin to "Macintosh HD:Users:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Édition:Fiches à trier:" as alias -- chemin du dossier à trier

set destination to "Macintosh HD:Users:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:" as alias -- chemin de dossier destination


tell application "Finder"
    set les_fichiers to files of chemin --récupère tous les fichiers à trier
    repeat with chaque_fichier in les_fichiers --répète avec chaque fichier trouvé
        set le_fichier to name of chaque_fichier as string --récupère le nom du fichier
        set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
        set AppleScript's text item delimiters to {" - "} -- defini le separateur
        set lepremier to text item 2 of le_fichier -- extrait le premier terme Nom prenom ou cabinet du xxx
        set ledeuxieme to text item 3 of le_fichier -- extrait le deuxieme terme nom prenom si premier = cabinet...
        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
        
        
        if lepremier contains "cabinet" then
            set ladestination to destination & lepremier & ":Fiches de traçabilité:" & ledeuxieme & ":2019"
        else
            set ladestination to destination & lepremier & ":Fiches de traçabilité:2019:"
        end if
        
        set original to chemin & le_fichier as string -- fabrique le chemin du fichier en cours
        
        move original to ladestination -- déplace le fichier
    end repeat
    
    display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"} -- préviens fin du script
end tell
 
Bonjour,
Après analyse de ton post.

1 - le chemin destination écrit dans ton script est différent de celui donné dans tes explications :
...... Fiches de traçabilité:Édition:" dans le script
.....Fiches de traçabilité:Dentistes:" dans les explications

2- Autre incompatibilité tu dis: (Les fichiers contenant MBAPPE Kylian doivent aller dans le dossier Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:MBAPPE Kylian:Fiches de traçabilité:2019:)
et (Les fichiers contenant Cabinet du PSG MBAPPE Kylian doivent aller dans le dossier Macintosh HD:Utilisateurs:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:Cabinet du PSG:Fiches de traçabilité:MBAPPE Kylian:2019:)

Lors du contrôle le script va trouvé (MBAPPE Kylian) dans les 2 fichiers donc ?


mes questions:
1 - Dans les fichiers , le nom prénom sont t' ils toujours en 2 mots et placés juste après (20191015 -)
2 - Tu as 2 fichiers (20191112 - VARANE Raphael - SERGIO.pdf et 20191113 - VARANE Raphael - RAMOS.pdf) doivent ils aller tous les 2 dans le même dossier ?
3 - les fichiers (Cabinet du PSG...) ce nom est' il toujours en 3 mots ou ??? et y a t' il d'autre nom à traiter différemment du nom patient ?
4 - le dossier de destination est nommé 2019 ? que se passera t' il en 2020 ?

Ces questions, parce que le script balaye le dossier des fichiers, et pour chaque fichier il récupère le 2ieme et 3ieme mot du nom du fichier, qui sont les nom et prénom du patient, puis fabrique le chemin de destination en ajoutant à la fin du chemin renseigné au début, ce nom, prénom et de plus maintenant il faudra ajouter :)Fiches de traçabilité:2019:)
Par contre pour les fiches (Cabinet du PSG), il va trouver comme nom et prenom (cabinet du) !

Il faut donc être sur de ce qu'il va pouvoir trouver (y a t'il d'autre nom possible juste après le 20191015 -) ?

Voilà, Beaucoup de questions mais nécessaire si on veux bien prendre en compte tous les cas de figure .

Je réponds point par point aux messages reçus :

1. Je sais mais j'avais pris soin de modifier ton script initial. Je cherche d'abord à comprendre l fonctionnement

2. Il y a en réalité 2 cas de figure :
- Le dentiste est un indépendant, dans ce cas le fichier aura le format suivant "date - nom prénom - patient.pdf
- Le dentiste travaille dans un établissement, dans ce cas, le fichier aura le format suivant "date - établissement - nom prénom - patient.pdf

Mais il est possible qu'un dentiste exerce dans plusieurs établissements différents, dans le cas de notre cher Mbappe, celui-ci a son propre cabinet et fait des vacations dans un centre. Les fiches ne vont pas au même endroit.
Il convient donc d'envoyer les fiches contenant le nom de l'établissement d'abord avant d'envoyer celles de son cabinet. Dans le cas inverse, des mauvaises fiches pourraient se trouver au même endroit.

3. Non il peut y avoir 1, 2, 3, parfois 10 mots même.

4. En 2020 je changerai les formules et les chemins de destination.

Je ne pense pas qu'un script récupérant les 2e et 3e mot du fichier est la bonne solution car ces données sont variables.
Il conviendrait de prédéfinir pour chaque cas la condition de tri et de l'envoyer en fonction.
 
Je viens de refaire un nouveau script qui tiens compte des nouvelles infos concernant les chemins et du dossier (cabinet du xxx)
Restera le problème du dossier 2019 (en 2020)

A tester

Bloc de code:
set chemin to "Macintosh HD:Users:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Édition:Fiches à trier:" as alias -- chemin du dossier à trier

set destination to "Macintosh HD:Users:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:" as alias -- chemin de dossier destination


tell application "Finder"
    set les_fichiers to files of chemin --récupère tous les fichiers à trier
    repeat with chaque_fichier in les_fichiers --répète avec chaque fichier trouvé
        set le_fichier to name of chaque_fichier as string --récupère le nom du fichier
        set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
        set AppleScript's text item delimiters to {" - "} -- defini le separateur
        set lepremier to text item 2 of le_fichier -- extrait le premier terme Nom prenom ou cabinet du xxx
        set ledeuxieme to text item 3 of le_fichier -- extrait le deuxieme terme nom prenom si premier = cabinet...
        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
       
       
        if lepremier contains "cabinet" then
            set ladestination to destination & lepremier & ":Fiches de traçabilité:" & ledeuxieme & ":2019"
        else
            set ladestination to destination & lepremier & ":Fiches de traçabilité:2019:"
        end if
       
        set original to chemin & le_fichier as string -- fabrique le chemin du fichier en cours
       
        move original to ladestination -- déplace le fichier
    end repeat
   
    display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"} -- préviens fin du script
end tell

Je vais essayer de comprendre tout ça et de le tester tout à l'heure. Merci pour ton aide en tout cas ! Je me sens moins bête depuis 2 jours
 
J'ai trouvé 2 petits Bug dans mon script que je viens de corriger.
De plus j'ai ajouté un contrôle de l'existence du fichier destination. s'il le trouve , il déplace sinon il te crée un fichier (Log erreur transfert.txt) sur le bureau qui te donnes le chemin qu'il n'a pas trouvé.

Bloc de code:
set chemin to "Macintosh HD:Users:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Édition:Fiches à trier:" as alias -- chemin du dossier à trier

set destination to "Macintosh HD:Users:maxime:Dentaire Dropbox:Dentaire:Fiches de traçabilité:Dentistes:" -- chemin de dossier destination


tell application "Finder"
    set les_fichiers to files of chemin --récupère tous les fichiers à trier
    repeat with chaque_fichier in les_fichiers --répète avec chaque fichier trouvé
        set le_fichier to name of chaque_fichier as string --récupère le nom du fichier
        set sauv to AppleScript's text item delimiters --sauvegarder la variable delimiteur
        set AppleScript's text item delimiters to {" - "} -- defini le separateur
        set lepremier to text item 2 of le_fichier -- extrait le
        set ledeuxieme to text item 3 of le_fichier -- extrait le
        set AppleScript's text item delimiters to sauv --restaurer la variable delimiteur
       
       
        if lepremier contains "cabinet" then
            set ladestination to destination & lepremier & ":Fiches de traçabilité:" & ledeuxieme & ":2019:"
        else
            set ladestination to destination & lepremier & ":Fiches de traçabilité:2019:"
        end if
       
        set original to chemin & le_fichier as string -- fabrique le chemin du fichier en cours
       
        if ladestination exists then
            move original to ladestination -- déplace le fichier
        else
            set lelog to open for access ((path to desktop folder as text) & "Log erreur transfert.txt") as text with write permission
            write " je n'ai pas trouvé le dossier " & ladestination & (ASCII character 13) & return to lelog starting at eof
            close access lelog
        end if
       
       
       
    end repeat
   
    display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"} -- préviens fin du script
end tell
 
Alors j'ai testé tout ça. Il y a du bon et c'est déjà bien.
Beaucoup de fichiers sont partis dans les dossiers
Beaucoup de fichiers sont aussi restés dans le dossier source initial (généralement ceux dont le nom du cabinet dépasse 3 mots)
Il n'y a pas eu de création de dossier (et c'est une très bonne chose d'ailleurs parce que je ne veux pas)

En résumé c'est encore à perfectionner mais c'est déjà pas mal du tout !