[osX10.6.8] dupliquer et renommer un fichier selon une liste

ccciolll

Membre expert
Club iGen
Bonjour,

j'ai tenté qqes recherches mais la plupart me mènent à des gens qui veulent modifier les noms d'un ensemble de fichiers (chose que je sais déjà faire avec NameChanger) et une discussion plus pointue où la personne voulait renommer une liste de fichier existants sur la base d'une liste de nom en excel, ce qui n'est pas tout à fait mon cas.

Pour ma part, j'ai un fichier image (jpg ou gif ou png, j'ai pas encore décidé, mais je penses que ça a peu d'importance) que je souhaite dupliquer autant de fois que nécessaire pour créer autant de doublons de ce fichier chacun nommés selon une liste que j'aurais sous forme excel ou un dérivé txt ou autre selon les besoins.

Admettons, j'ai ma liste de noms qui donne
123456
123457
234567
456789

et mon fichier image
sanstitre.jpg

et à la fin je dois avoir 4 fichiers image
123456.jpg
123457.jpg
234567.jpg
456789.jpg

Est-ce qu'un logiciel existe pour faire ça en un coup de cuillère à pot (car ma liste ça ne sera pas 4 lignes comme dans l'exemple mais des dizaines voire centaines de lignes) ou est-ce que ce sera plus compliqué ?
 
Bonjour,

Essaie ce script AppleScript :

Bloc de code:
property thisFile : missing value
property destFolder : missing value
property l_extension : missing value
set thisFile to choose file with prompt "Sélectionnez un fichier de type image à dupliquer."
set destFolder to choose folder with prompt "Sélectionnez le dossier où vous voulez dupliquer le fichier."
tell application "Finder" to set l_extension to name extension of thisFile
if l_extension is not "" then set l_extension to "." & l_extension
my getList()

on getList()
    script o
        property myList : {}
    end script
    tell application "Microsoft Excel"
        set o's myList to string value of selection
    end tell
    set tc to count o's myList
    repeat with i from 1 to tc
        set thisList to item i of o's myList
        repeat with nom in thisList
            my duplicateFile(nom)
        end repeat
    end repeat
end getList

on duplicateFile(nom)
    tell application "Finder" to try
        set x to duplicate thisFile to destFolder
        set name of x to nom & l_extension
    end try
end duplicateFile

Le script demandera le fichier et le dossier de destination.
Il prendra les noms dans les cellules que vous avez sélectionnées dans Excel. (testé sur Excel 15.13.1, cela devrait fonctionner sur une version plus ancienne)

Le script ne dupliquera pas un fichier dont le nom existe déjà dans le dossier de destination.

-----
Si la duplication doit se faire dans le même dossier que le fichier sélectionné, utilise ce script
Bloc de code:
property thisFile : missing value
property l_extension : missing value
set thisFile to choose file with prompt "Sélectionnez un fichier de type image à dupliquer."
tell application "Finder" to set l_extension to name extension of thisFile
if l_extension is not "" then set l_extension to "." & l_extension
my getList()

on getList()
    script o
        property myList : {}
    end script
    tell application "Microsoft Excel"
        set o's myList to string value of selection
    end tell
    set tc to count o's myList
    repeat with i from 1 to tc
        set thisList to item i of o's myList
        repeat with nom in thisList
            my duplicateFile(nom)
        end repeat
    end repeat
end getList

on duplicateFile(nom)
    tell application "Finder" to try
        set x to duplicate thisFile
        set name of x to nom & l_extension
    end try
end duplicateFile
 
  • J’aime
Réactions: ccciolll
J'ai visité ces deux sites
http://www.jannaud.fr/applescript
http://trad.applescript.free.fr/generalas.html
mais il ne commencent jamais par le début et démarrent tout de suite avec des considérations très spécialisées (le code en lui-même, quoi)
j'ai cherché dans mes applis s'il y avait un logiciel nommé AppleScript
pas trouvé non plus.

Donc, si je veux tester ton applescript je fais COMMENT ?
Je le copie dans quoi ? Je l'active comment ?

Oui, je suis d'accord c'est le B-A-BA de l'Applescript que je demande, j'ai l'air aussi bête que qqun qui n'arriverait pas à aller sur Google.fr car il ne sait pas où se trouve le bouton pour démarrer son ordinateur et ne trouve que des modes d'emploi de Firefox… mais les sites que j'ai trouvé qui prétendent expliquer l'actionScript ne disent pas comment faire, ils supposent tous qu'on sait déjà OÙ ET COMMENT commencer à coder son applescript.
Ben pas moi.

EDIT : pour faire plus parlant, je suis comme qqun a qui on aurait appris un texte en chinois phonétique, mais qui ne sait pas où rencontrer des chinois pour leur dire, et quand il cherche sur internet « avec qui parler chinois » ne tomberait que sur des dictionnaires franco-chinois…
 
Tu devrais trouver ce qu'il faut dans:

Applications --> Utilitaires --> Editeur de script

Tu lances "Editeur de script" et dans la fenêtre tu fais un copier, coller du code de JacqR puis tu cliques sur le bouton exécuter.
 
Bonsoir,

Donc, si je veux tester ton applescript je fais COMMENT ?
Je le copie dans quoi ? Je l'active comment ?

Oui, je suis d'accord c'est le B-A-BA de l'Applescript que je demande, j'ai l'air aussi bête que qqun qui n'arriverait pas à aller sur Google.fr car il ne sait pas où se trouve le bouton pour démarrer son ordinateur et ne trouve que des modes d'emploi de Firefox… mais les sites que j'ai trouvé qui prétendent expliquer l'actionScript ne disent pas comment faire, ils supposent tous qu'on sait déjà OÙ ET COMMENT commencer à coder son applescript.
Ben pas moi.
Est-ce que c'est de l'humour? :D:coucou:

Si ce n'est pas de l'humour :
Pouvez-vous m'expliquer comment vous avez fait pour créer un script qui s'exécute dans une règle de Mail (ce message) ?

Dans ce post, vous avez testé un script AppleScript, donc vous savez comment exécuter un AppleScript !

Vous avez testé un autre script AppleScript dans ce post.

Dans ce post, vous avez créé une application à partir d'un script AppleScript.

Dans ce post, vous suggérez un AppleScript à une autre personne. http://forums.macg.co/threads/modifier-la-casse.132176/#post-3696846
 
  • J’aime
Réactions: aCLR
Est-ce que c'est de l'humour? :D:coucou:

Non non, même pas.


Pouvez-vous m'expliquer comment vous avez fait pour créer un script qui s'exécute dans une règle de Mail (ce message) ?
Je ne me souviens pas en détail (c'est vieux) mais d'après ce que je lis, j'avais utilisé automator et mail, et suivi un mode d'emploi qqpart.

Dans ce post, vous avez testé un script AppleScript, donc vous savez comment exécuter un AppleScript !
En effet. En plus ça ressemble un peu à ce que je souhaite faire aujourd'hui.
Dans la discussion je ne dis pas comment j'ai fait pour tester le script (défaut de feed back, c'est pas bien !). Possible que j'ai su le faire un jour et que 7 ans après j'aie oublié (la discussion date de 2008, quand-même…)

Vous avez testé un autre script AppleScript dans ce post.

En effet, et cette fois là ce brave CMYK a bien précisé
CMYK a dit:
Tu copies les lignes dans Editeur de script, Pomme-K pour compiler, Pomme-R pour faire tourner ton script

Donc ça a dû bien m'aider.


Dans ce post, vous avez créé une application à partir d'un script AppleScript.

Pas de souvenir non plus, mais, pffiouuu 2009, quoi.


Dans ce post, vous suggérez un AppleScript à une autre personne. http://forums.macg.co/threads/modifier-la-casse.132176/#post-3696846
C'est là qu'on voit que je suis capable de conseiller des trucs que je ne comprends pas moi-même…

2006 ce dernier…

Ben mon cerveau marche de moins en moins bien, voilà tout.

Il y a des trucs, comme ça, qui font un blocage. Pour la programmation je suis toujours à la ramasse ; j'ai pas les bases, je suppose, ou pas l'esprit qu'il faut pour coder.
Je comprends parfaitement l'intérêt de la chose, mais je n'arrive pas à dépasser le stade d'utilisateur. Du coup j'oublie au fur et à mesure tout ce que j'ai appris.

Bon, et maintenant si j'allais tester tout ça ?
 
Bien, alors voici ce que j'ai fait.

Mis dans un dossier une image quelconque.
Créé un nouveau fichier excel dans lequel j'ai tapé 3 ligne de noms différents, et enregistré le xls dans ce même dossier fraichement créé.
Puis je suis allé dans Applications > Utilitaires > Editeur de script
Là j'ai collé le code fourni, cliqué compiler puis Pomme-S et enregistré le Script sur le bureau.
Quand j'ai double cliqué le script créé, il est revenu à la fenêtre de éditeur de script, donc j'en ai conclu que ça ne servait à rien d'enregistrer mon script…
Là j'ai continué le test en cliquant sur la touche exécuter dans editeur de script.
Le début a bien marché, il m'a demandé le fichier, puis la destination.
Mais ensuite plus rien.

J'ai fait plusieurs tests.
Fichier excel ouvert avec les cellule sélectionnées
Fichier excel ouvert sans rien de sélectionné
Excel fermé.

J'ai seulement pu constater que si excel est fermé il le démarre, mais ensuite même si à l'ouverture d'excel je choisis mon fichier excel, je ne constate pas de résultat.

Alors soit c'est mon excel qui est trop vieux (c'est du 2004…) soit j'ai encore merdé un truc.

Après, je ne suis pas bloqué sur excel, la liste je peux la mettre dans un autre logiciel plus récent si ça rend les choses faciles. J'ai textedit et qqes copains (textwrangler et komodo). J'ai même NeoOffice (pour ouvrir les xlsx de plus en plus courants et les remettre en xls tout court car aucun des remplaçant gratuits d'excel ne le dépasse encore en matière d'outils que je maîtrise, même si ce n'est qu'un 2004).
 
Bonjour,

Bien, alors voici ce que j'ai fait.
Là j'ai continué le test en cliquant sur la touche exécuter dans editeur de script.
Le début a bien marché, il m'a demandé le fichier, puis la destination.
Mais ensuite plus rien.
Ok,

Il faut s'assurer que le nom du fichier à dupliquer n'existe pas dans le dossier de destination, sinon la duplication ne se fera pas (aucune erreur ne sera affichée, car le code est dans un bloc try).
Ce n'est pas un problème pour le deuxième script qui lui duplique le fichier dans le même dossier

Si vous voulez continuer avec Excel, il y a certainement une différence entre les versions, il suffit de la trouver :
Sélectionner deux cellules dans Excel :
Exécutez ce script dans l'éditeur et donnez-moi le résultat (le texte dans la partie du bas de la fenêtre de l'éditeur.
Bloc de code:
tell application "Microsoft Excel"
    return string value of selection
end tell

Faites la même chose avec ce script
Bloc de code:
tell application "Microsoft Excel"
    return value of selection
end tell

-------------
Voici une solution avec une selection de texte dans TextWrangler (un nom par ligne) :
Remplace la fonction on getList() dans un des scripts proposés de mon premier message
Bloc de code:
on getList()
    script o
        property myList : {}
    end script
    tell application "TextWrangler"
        set o's myList to paragraphs of (get contents of selection)
    end tell
    set tc to count o's myList
    repeat with i from 1 to tc
        set nom to item i of o's myList
        if nom is not "" then my duplicateFile(nom) -- si ce n'est pas une ligne vide
    end repeat
end getList
 
Voici la modification de la fonction on getList()
Pour ne pas avoir de problème en cas d'une selection d'une seule cellule, et en cas de cellule vide dans Excel
Bloc de code:
on getList()
    script o
        property myList : {}
    end script
    tell application "Microsoft Excel"
        set o's myList to string value of selection
        if class of o's myList is not list then set o's myList to {{o's myList}} -- ce n'est pas une liste, car une seule cellule est sélectionnée
    end tell
    set tc to count o's myList
    repeat with i from 1 to tc
        set thisList to item i of o's myList
        repeat with nom in thisList
            if nom is not "" then my duplicateFile(nom)
        end repeat
    end repeat
end getList
 
Dernière édition:
  • J’aime
Réactions: klutch
Exécutez ce script dans l'éditeur et donnez-moi le résultat (le texte dans la partie du bas de la fenêtre de l'éditeur.
Bloc de code:
tell application "Microsoft Excel"
    return string value of selection
end tell

ça donne :
missing value
Faites la même chose avec ce script
Bloc de code:
tell application "Microsoft Excel"
    return value of selection
end tell

Là ça marche, j'obtiens :
{{"mac"}, {"generation"}}
et j'avais mis mac dans la première cellule puis génération dans la deuxième.

Donc peut-être que ça peut marcher si je change String value par value tout court dans le code ?
Je vais déjà tester ça.
 
Yes !
ça fonctionne donc avec cette légère modification du code applescript
Bloc de code:
property thisFile : missing value
property destFolder : missing value
property l_extension : missing value
set thisFile to choose file with prompt "Sélectionnez un fichier de type image à dupliquer."
set destFolder to choose folder with prompt "Sélectionnez le dossier où vous voulez dupliquer le fichier."
tell application "Finder" to set l_extension to name extension of thisFile
if l_extension is not "" then set l_extension to "." & l_extension
my getList()

on getList()
    script o
        property myList : {}
    end script
    tell application "Microsoft Excel"
        set o's myList to value of selection
    end tell
    set tc to count o's myList
    repeat with i from 1 to tc
        set thisList to item i of o's myList
        repeat with nom in thisList
            my duplicateFile(nom)
        end repeat
    end repeat
end getList

on duplicateFile(nom)
    tell application "Finder" to try
        set x to duplicate thisFile to destFolder
        set name of x to nom & l_extension
    end try
end duplicateFile

Et je redonne donc la procédure
Enregistrer son fichier image une première fois avec un nom bidon
Préparer un dossier vide en guise de destination
Créer un fichier excel comportant tous les noms voulus dans des cellules (pour ma part ça a marché avec les cellules les unes au dessus des autres, comme une liste de course, quoi)
Sélectionner dans excel toutes les cellules comportant des noms
puis retourner au finder
Ouvrir Applications>Utilitaires>Editeur de script
coller le code ci-dessus
cliquer sur compiler (ça vérifie qu'on a proprement copié)
cliquer sur éxecuter
Suivre les instructions qui appraitront

Et ça marche.

Et on dit merci à JacqR qui est l'auteur de ce code.
 
  • J’aime
Réactions: daffyb
Alors juste un truc : ça ne fonctionne pas si les « noms » dans excel sont des nombres (ce qui était mon cas), même en activant la cellule au format texte.
Du coup, ma solution bricole : ajouter un « a » devant chaque nombre, appliquer le script, et ensuite corriger l'ensemble des fichiers créés avec l'aide de NameChanger.
 
Une petite modification.

Depuis excel tu enregistres ton fichier au format texte (séparateur:tabulation)

et tu essais avec ce script
idem il te demande
1 - l'image à dupliquer
2 - le dossier de réception
3 - ton fichier liste.

Cela devrait t'éviter toutes tes manips.

set fichiersource to choose file with prompt "Sélectionnez le fichier à dupliquer."
set dossiercible to choose folder with prompt "Sélectionnez le dossier où vous voulez dupliquer le fichier."
set laliste to choose file with prompt "séléctionnez le fichier liste"
tell application "Finder" to set l_extension to name extension of fichiersource
if l_extension is not "" then set l_extension to "." & l_extension


open for access laliste
read laliste
set tout_le_fichier to the result
close access laliste
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
my duplicateFile(une_ligne, fichiersource, dossiercible, l_extension)
end repeat


on duplicateFile(nom, fichiersource, dossiercible, l_extension)
tell application "Finder" to try
set x to duplicate fichiersource to dossiercible
set name of x to nom & l_extension
end try
end duplicateFile
tell application "Finder"
(display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
  • J’aime
Réactions: ccciolll
Ça marche du tonnerre !
 
Bonjour,

Alors juste un truc : ça ne fonctionne pas si les « noms » dans excel sont des nombres (ce qui était mon cas), même en activant la cellule au format texte.
Du coup, ma solution bricole : ajouter un « a » devant chaque nombre, appliquer le script, et ensuite corriger l'ensemble des fichiers créés avec l'aide de NameChanger.
Oui, c’est pour cela que string value était nécessaire pour éviter les problèmes avec les nombres, mais cela ne fonctionne pas sur ta version.

Il y a une solution :
Convertir le format des cellules au format texte.
Mais comme ces valeurs étaient rentrées comme un nombre, il faut aussi convertir ces valeurs :
Cette méthode est pour ma version de Excel, cela peut-être légèrement différent sur une version plus ancienne.
Sélectionnez tous les noms.
Sélectionnez le menu "Convertir..." dans le menu "Données".
Appuyer sur le bouton "Suivant"
Appuyer sur le bouton "Suivant"
Sélectionnez la case "Texte"
Appuyer sur le bouton "Fin"​

Maintenant, le script récupèrera ces valeurs comme du texte.​


-----
Autre solution (pas besoin de changer le format des cellules dans Excel) :
Le script copie dans le presse-papiers la sélection dans Excel, le presse-papiers sera restauré après la récupération des noms.​
Bloc de code:
on getList()
    script o
        property myList : {}
    end script
    set oldClipB to the clipboard -- sauvegarde le presse-papiers
    tell application "Microsoft Excel"
        copy range selection
    end tell
    set oldTid to text item delimiters
    set text item delimiters to tab
    set x to paragraphs of (the clipboard as string)
    set x to x as string -- remplace les fin de ligne par une tabulation
    set o's myList to text items of x -- récupère les noms séparés par une tabulation
    set text item delimiters to oldTid
    set the clipboard to oldClipB -- restaure le presse-papiers
  
    set tc to count o's myList
    repeat with i from 1 to tc
        set nom to item i of o's myList
        if nom is not "" then my duplicateFile(nom)
    end repeat
end getList
 
On n'a donc plus que l'embarras du choix parmi toutes ces solutions !
 
Si à la place d'un fichier image je veux faire la même démarche mais avec un dossier vide, ou un fichier autre que image, que faut-il modifier ?
 
Bonjour,

Si à la place d'un fichier image je veux faire la même démarche mais avec un dossier vide, ou un fichier autre que image, que faut-il modifier ?

Aucun changement n’est nécessaire, le script n’exclut aucun type de fichier.
Mais, si vous voulez un autre titre pour la fenêtre de dialogue, vous pouvez modifier cette ligne :
Bloc de code:
set thisFile to choose file with prompt "Sélectionnez un fichier de type image à dupliquer."
Par exemple:
Bloc de code:
set thisFile to choose file with prompt "Sélectionnez un fichier à dupliquer."


Par contre pour un dossier, la commande AppleScript sera différente (choose folder au lieu de choose file) :
Bloc de code:
set thisFile to choose folder with prompt "Sélectionnez un dossier à dupliquer."
 
  • J’aime
Réactions: ccciolll
Par contre pour un dossier, la commande AppleScript sera différente (choose folder au lieu de choose file) :
Bloc de code:
set thisFile to choose folder with prompt "Sélectionnez un dossier à dupliquer."

Ça marche !

Merci merci merci