Sélectionner fichiers à partir d'une liste avec Automator

Hello Zeltron54, tu es un as !
C'est parfait, ton dernier script fonctionne à merveille.
Tu viens de me faire gagner 1 heure de paperasse par production !

Merci beaucoup !

Tu connais un bon site ou un bon bouquin qui détaillerais bien le langage Applescript ?
Je comprend bien la logique, mais il me manque le vocabulaire et j'aimerais pouvoir automatiser plein d'autres tâches pour le boulot.

En tout cas, merci encore pour ton aide !
 
Content pour toi.
Pour apprendre, il y a quelques sites (pour débuter) et des forums de développeurs, pas de bouquins récents à ma connaissance.
 
voila un petit script qui devrait fonctionner:
il faut enregistrer ta liste depuis excel au format : texte séparateur tabulation

le script te demandes de sélectionner le dossier source, puis le dossier cible, puis enfin le fichier liste, puis il copie les fichiers de la liste de la source dans la cible.
Fait un copier, coller de ce script dans une fenêtre applescript. puis exécuter.

tell application "Finder"
set cheminsource to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à copier"
set chemincible to choose folder with prompt "Sélectionnez le dossier cible"
set laliste to choose file with prompt "Sélectionnez le fichier liste"
my inspecter(cheminsource, chemincible, laliste)
end tell

on inspecter(source, cible, liste1)

set dossiersource to source as string
set dossiercible to cible as string


open for access liste1
read liste1
set tout_le_fichier to the result
close access liste1
set AppleScript's text item delimiters to (ASCII character 13)
set toutes_les_lignes to (every text item of tout_le_fichier) as list
set AppleScript's text item delimiters to ""
set tout_le_fichier to ""


repeat with une_ligne in toutes_les_lignes
set CheminImage to dossiersource & une_ligne
tell application "Finder"

duplicate CheminImage to dossiercible

end tell
end repeat
end inspecter
tell application "Finder"
(display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell



Edit: le fichier excel doit avoir une colonne "A", avec un nom de fichier par ligne .

Bonjour, je relance ce vieux sujet en espérant que j'obtienne une réponse :)

voilà j'ai le même problème, j'ai une liste de photo, un dossier photos (contenant plusieurs photos dont celle de la liste) , et je souhaiterais que seul les photos de la liste soit copiées dans un autre dossier. J'ai essayé de recopier le script ci-dessus, mais sa ne fonctionne pas, je dois surement mal faire quelques choses.

y'a-t-il une subtilité à faire que je connais pas ?

merci d'avance de vos retours !
 
@lydy
Bonsoir,
Le script du message #40 devrait fonctionner. si ce n'est pas le cas, dis exactement ce que tu fais, ce que tu obtiens, et ce qui ne fonctionne pas.
Détaille ton problème qu'on essaie de voir ce qui pêche chez toi...

Édit. Le script a été fait pour des fichiers dont l’extension est .PDF Donc il faudra l’adapter à ton cas. Est ce que ta liste des noms inclu l’extension ou pas ?
 
Dernière édition:
@lydy
D'après ton autre message https://forums.macg.co/threads/recherche-automatique-de-photos-via-une-liste.1318789/#post-13460635
ta liste contient le nom avec l'extension donc ce script devrait faire le job.
Au lancement il te demande de sélectionner le dossier source (il peut contenir les photos et des dossiers contenant eux même des photos...), puis de sélectionner le dossier destination (dans lequel seront dupliquées les photos), puis la liste (au format texte , 1 photo par ligne)
et il n'y a plus qu'a attendre le message de fin. si une ou des photos de la liste ne sont pas trouvées, un fichier lelog.txt est créé sur le bureau contenant la liste des photos non trouvées.

Dis moi si cela fonctionne ou quel est le problème.

Bloc de code:
tell application "Finder"
    set cheminsource to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à copier"
    set chemincible to choose folder with prompt "Sélectionnez le dossier cible"
    set laliste to choose file with prompt "Sélectionnez le fichier liste"
    my inspecter(cheminsource, chemincible, laliste)
end tell

on inspecter(source, cible, liste1)
   
    set dossiersource to source as string
    set dossiercible to cible as string
    set destination to dossiercible
   
    open for access liste1
    read liste1
    set tout_le_fichier to the result
    close access liste1
    set nb to count paragraph of tout_le_fichier
   
    repeat with i from 1 to nb
       
        try
            tell application "Finder"
                set une_ligne to paragraph i of tout_le_fichier
                set lefichier to do shell script "find  " & quoted form of POSIX path of dossiersource & " -iname " & une_ligne
                set CheminImage to POSIX file lefichier as string
                duplicate CheminImage to destination
            end tell
        on error
            set lelog to open for access (path to desktop folder as text) & "lelog.txt" as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
            write "Le fichier " & une_ligne & " N'a pas été trouvé" & return to lelog starting at eof
            close access lelog -- ferme le fichier log
        end try
    end repeat
end inspecter

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
@lydy
D'après ton autre message https://forums.macg.co/threads/recherche-automatique-de-photos-via-une-liste.1318789/#post-13460635
ta liste contient le nom avec l'extension donc ce script devrait faire le job.
Au lancement il te demande de sélectionner le dossier source (il peut contenir les photos et des dossiers contenant eux même des photos...), puis de sélectionner le dossier destination (dans lequel seront dupliquées les photos), puis la liste (au format texte , 1 photo par ligne)
et il n'y a plus qu'a attendre le message de fin. si une ou des photos de la liste ne sont pas trouvées, un fichier lelog.txt est créé sur le bureau contenant la liste des photos non trouvées.

Dis moi si cela fonctionne ou quel est le problème.

Bloc de code:
tell application "Finder"
    set cheminsource to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à copier"
    set chemincible to choose folder with prompt "Sélectionnez le dossier cible"
    set laliste to choose file with prompt "Sélectionnez le fichier liste"
    my inspecter(cheminsource, chemincible, laliste)
end tell

on inspecter(source, cible, liste1)
 
    set dossiersource to source as string
    set dossiercible to cible as string
    set destination to dossiercible
 
    open for access liste1
    read liste1
    set tout_le_fichier to the result
    close access liste1
    set nb to count paragraph of tout_le_fichier
 
    repeat with i from 1 to nb
     
        try
            tell application "Finder"
                set une_ligne to paragraph i of tout_le_fichier
                set lefichier to do shell script "find  " & quoted form of POSIX path of dossiersource & " -iname " & une_ligne
                set CheminImage to POSIX file lefichier as string
                duplicate CheminImage to destination
            end tell
        on error
            set lelog to open for access (path to desktop folder as text) & "lelog.txt" as text with write permission -- ouvre le fichier log et ecritles valeur séparé par une tabulation
            write "Le fichier " & une_ligne & " N'a pas été trouvé" & return to lelog starting at eof
            close access lelog -- ferme le fichier log
        end try
    end repeat
end inspecter

tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell


Merci !! ça fonctionne ! tu n'imagines pas à quel point tu vas faciliter mon labeur de recherche de photo !

2 petites questions si possible :
- si dans mon dossier source (ou je vais chercher mes images) il y a plusieurs fois la même image avec des extensions différentes, le script ira bien me chercher uniquement l'extension que j'ai renseigné dans la liste ?

si je veux chercher autre chose que du .psd quelle partie du code dois-je changer ?
 
Si plusieurs fois la même image avec des extensions différentes elles seront traitées comme des images différentes et ne seront dupliquées que celles présentent dans la liste (nom + extension).

Dans le script que je t'ai données il prend tous les fichiers de ta liste avec l'extension renseignées donc si c'est autre chose que des images pas de problème pourvu que ta liste contienne bien le nom du fichier avec son extension.
 
Dernière édition:
bonjour

je pense que cette base de script peut m'être très utile pour me faire gagner un temps fou sur un projet

voila mon projet :
j'ai une liste excel de sites (lieu) qui porte un nom, un code postal et un numero d'identification

j'aimerais via cette liste créer un nombre de dossier équivalent du type "CP-NOM-NUMERO"
il faudrait que ces dossiers soit la copie d'un dossier type et que les nom de fichier soit modifier en même temps

exemple :

DOSSIER TYPE
- FICHIER XLS
- FICHIER DOC
- ect ...

dossier créé > 69100-VILLEURBANNE SUD-123455
- 123455-VILLEURBANNE SUD.XLS
- 123455-VILLEURBANNE SUD.DOC
- ect ...

Pouvez-vous m'aider ?
 
Bonjour,

J'ai beaucoup de mal à comprendre exactement ton besoin.

Tu veux créer un hiérarchie de dossiers qui porterons le nom qui est à récupérer dans une liste excel c'est bien ça ???

Tu parles de Dossier type ?? et, de plus, dans ton exemple "dossier créé" les noms de dossiers ont des noms de fichiers (avec une extension .xls .doc) ??

Si tu peux préciser ton projet, on pourra regarder pour établir un script.
 
Dernière édition:
J'imagine plutôt que pour chaque commune/projet, il faut créer un dossier contenant des fichiers xls et doc à remplir ultérieurement, créés à partir d'un document-type (ou un modèle) et placés dans le dossier.
Le dossier et les fichiers qu'il recèle porteront chacun un nom adapté.

La solution imaginée par aminjat était de faire un dossier (type) contenant les deux fichiers, vierges mais déjà mis en forme, de copier le tout pour chaque ligne du tableur et de renommer chaque fois les trois éléments.
 
@baron :coucou:

Ok je comprend mieux, je vais attendre sa confirmation, et regarderai ça dès que j'aurai un moment. ;)
 
J'imagine plutôt que pour chaque commune/projet, il faut créer un dossier contenant des fichiers xls et doc à remplir ultérieurement, créés à partir d'un document-type (ou un modèle) et placés dans le dossier.
Le dossier et les fichiers qu'il recèle porteront chacun un nom adapté.

La solution imaginée par aminjat était de faire un dossier (type) contenant les deux fichiers, vierges mais déjà mis en forme, de copier le tout pour chaque ligne du tableur et de renommer chaque fois les trois éléments.


tu n'aurait pas pu mieux l'expliquer que ça :pompous:
 
Bonsoir,

Il faudrait savoir comment est cette liste excel , 3 colonnes , dans quelles ordre, et dans quel ordre construire le nom du dossier, et des fichiers.

L'idéal sera d'enregistrer ce fichier au format texte séparateur tabulation.

Au vu des ces infos je pourrai te faire un petit script.
 
il faudrait que le nom de dossier et de fichier soit équivalent a : NUMERO - NOM - CP
je peut créer le fichier txt via excel en le mettant en forme dans le sens qu'il faut ( il est déja sur plusieurs colonnes )

est-ce que quelque chose comme cela pourrait aller ?

N° SS;NOM STATION;CP
9505;MARSEILLE ROCHES;13007
9441;MARSEILLE CLOT BEY;13008
9511;MARSEILLE LOUP;13011
9434;MARSEILLE ST JUST;13013
9513;MARSEILLE MARTHE;13014
9430;MARSEILLE ANTOINE;13015
 
Alors pas de problème si c'est ce qui t'arranges, je pensais plus à un séparateur comme une tabulation, mais un point virgule ira très bien.
Le fichier texte ne devra pas avoir la première ligne (nom des champs)


Donc le nom du dossier sera:
9505_MARSEILLE ROCHES_13007
etc...

Ok je te fais ça
 
Lors du lancement du script il te demande de sélectionner le dossier type, puis le dossier vierge dans lequel sera construit la structure par copie du dossier type, puis enfin le fichier texte de la liste.

Il suffit de patienter, il affiche une boite de dialogue lorsque c'est fini. Il ne touche en aucun cas aux fichiers originaux.

Dis moi si ça fonctionne comme tu veux !

Bloc de code:
Tell application "Finder"
    set cheminsource to choose folder with prompt "Sélectionnez le dossier type à reproduire"
    set chemincible to choose folder with prompt "Sélectionnez le dossier cible dans lequel sera créé la structure"
    set laliste to choose file with prompt "Sélectionnez le fichier liste"
    
    open for access laliste
    read laliste
    set tout_le_fichier to the result
    close access laliste
    set nb to count paragraph of tout_le_fichier
    set ledossier to name of cheminsource
    repeat with i from 1 to nb
        
        tell application "Finder"
            set une_ligne to paragraph i of tout_le_fichier
            set AppleScript's text item delimiters to (ASCII character 59)
            set lenom to text item 1 of une_ligne & "_" & text item 2 of une_ligne & "_" & text item 3 of une_ligne
            set AppleScript's text item delimiters to ""
            
            duplicate cheminsource to chemincible
            set dest to chemincible & ledossier
            set dest to dest as string
            set name of folder dest to lenom
        end tell
        
    end repeat
end tell

my inspecter(chemincible)

on inspecter(un_dossier)
    set ledossier to un_dossier as string
    set ledossier to text 1 thru -2 of ledossier
    set AppleScript's text item delimiters to {":"}
    set ddd to get last text item of ledossier
    
    tell application "Finder"
        set les_fichiers to files of un_dossier
        
        repeat with chaque_fichier in les_fichiers
            
            set nom to name of chaque_fichier
            set extens to document file nom in un_dossier
            set lextension to name extension of extens
            
            set nouveaunom to (ddd & "." & lextension) as string
            
            
            set name of file nom of un_dossier to nouveaunom
        end repeat
        set les_dossiers to folders of un_dossier
        repeat with chaque_dossier in les_dossiers
            my inspecter(chaque_dossier)
        end repeat
    end tell
end inspecter


tell application "Finder"
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Donc le nom du dossier sera:
9505_MARSEILLE ROCHES_13007
etc.
Et ce dossier contiendra des copies de FICHIER-TYPE.xls et FICHIER-TYPE.doc,
nommées :
9505_MARSEILLE ROCHES_13007.xls
9505_MARSEILLE ROCHES_13007.doc

;)

+++++++++++

P.S. Oups… tu as posté entretemps…
Ça a l'air vachement bien !

J'ajouterais juste encore ceci dans les explications préliminaires :
il te demande de sélectionner le dossier type
… dans lequel tu auras placé un modèle des deux fichiers xls et doc.
 
Dernière édition:
Bonsoir @baron :coucou:
Tu as testé, ça fonctionne chez toi ?
 
je testerais ca jeudi quand j'aurais acces au fichier xls complet et je revient vers vous

en tout cas merci beaucoup d'avoir pris le temps de me repondre