# Applescript et Automator



## EliptiK001 (19 Août 2013)

Bonjour,

Voici mon premier message sur ce forum 
Celui-ci concerne un processus que j'essaye de créer pour mon mbp avec Automator et Applescript (Applescript je n'y connais rien).

Le but est simple : 
- Je créé un dossier avec un NOM.
- Le processus change le nom de ce dossier en : date_du_jour NOM
- Puis ajoute une arborescence du type :
DOSSIER1
sous-dossier1
sous-dossier2
DOSSIER2
DOSSIER3​
Et voila le flux que j'ai :


> Ajouter date et heure à des noms d'éléments du Finder
> Puis cet Applescript :
> 
> on run {input, parameters}
> ...




Le problème est que le début marche bien mais l'Applescript ne récupère pas le dossier renommer pour y mettre l'arborescence, il me demande de lui donner le chemin avec une fenetre... Ce qui est du à l'action "choose folder" :rose:
Mais par quoi la remplacer ?

Merci de votre lecture,
Bonne journée


----------



## ceslinstinct (19 Août 2013)

EliptiK001 a dit:


> Bonjour,
> 
> Voici mon premier message sur ce forum
> Celui-ci concerne un processus que j'essaye de créer pour mon mbp avec Automator et Applescript (Applescript je n'y connais rien).



Bonsoir

Le chemin que tu donne est pour créer le dossier dans lequel seront placés les sous-dossiers.

Il faut alors donner le chemin pour créer les sous-sous-dossiers qui lui est différent.

Un code en applescript pour te donner une idée pour créer ton propre code.

Testé avec Mountain Lion 10.8.4


-- Initialisation des variables des Dossiers et Sous-Dossiers à créer (a modifier à la demande)
set {dossiers_, sous_Dossiers} to {{"Dossier1", "Dossier2", "Dossier3"}, {"1-CR2", "2-PSD", "3-JPEG", "4-JPEG BD"}}

-- La date en format type 19-08-2013 (pour faire simple) en utilisant le terminal
set date_ to (do shell script "date +\"%d-%m-%G\"") as string

-- Choix du nom du futur dossier
set nomDossier to text returned of (display dialog "Nom du dossier" default answer "")

-- Ou l'installer
set destination to choose folder with prompt "Choisissez où créer le dossier" 

-- Ajout de la date au nom
set dossierMaitre to nomDossier & " " & date_ as string
-- Date et nom à la  suite
-- set dossierMaitre to date_ & " " & nomDossier as string

-- Chemin de destination de ce nouveau dossier
set chemin to destination & dossierMaitre & ":" as string

tell application "Finder" -- Oui, on a besoin de lui

	-- Création du dossier daté
	make new folder at destination with properties {name:dossierMaitre}

	-- Lecture et création des sous-dossiers
	repeat with i from 1 to (count items of dossiers_)
		-- Lecture des noms des sous-dossiers
		set lue to text item i of dossiers_ as string
		-- Création des sous-dossiers
		make new folder at chemin with properties {name:lue}

		-- Si c'est le sous-dossier Dossier1
		if lue is item 1 of dossiers_ then
			-- Chemin de ce sous-dossier
			set nouveauChemin to chemin & lue & ":" as string

			-- Lecture et création des sous-sous-dossiers
			repeat with j from 1 to (count items of sous_Dossiers)
				-- Lecture des noms des sous-sous-dossiers
				set lue_ to text item j of sous_Dossiers as string
				--Création de ces sous-sous dossiers
				make new folder at nouveauChemin with properties {name:lue_}
			end repeat

		end if
	end repeat
end tell


J'ai écrit ce code pour bien comprendre le fonctionnement, par le terminal 4 lignes font le travail.

Excuse moi si trop de commentaires, c'est juste pour comprendre ma réponse.

Bienvenue parmi nous.

PS: Dans la date j'ai pas placé le temps, je sais pas si tu désire un résultat à la seconde où au milliardième (c'est à ajouter). 

Cordialement

@+


----------



## EliptiK001 (21 Août 2013)

Merci beaucoup pour cette réponse très complète ! 
Donc si je comprends bien, je ne peux pas mélanger Automator et AppleScript ? Ou ça ne sert simplement a rien ?
J'ai bien compris le fonctionnement, ceci dit je serai incapable de la refaire pour le moment !

Les étapes "ou l'installer" et "chemin de destination de ce nouveau dossier" sont elles équivalentes ? (Je n'ai pas n'ai pas encore eu le temps de tester ce code, ce qui va être fait dans la soirée)

Encore merci pour cette aide !


----------



## ceslinstinct (21 Août 2013)

EliptiK001 a dit:


> Merci beaucoup pour cette réponse très complète !
> Donc si je comprends bien, je ne peux pas mélanger Automator et AppleScript ?



Tu peut utiliser Automator avec de l'AppleScript.

Mon exemple et sans Automator, je ne l'utilise jamais dans mes codes.


> J'ai bien compris le fonctionnement, ceci dit je serai incapable de la refaire pour le moment !
> 
> Les étapes "ou l'installer" et "chemin de destination de ce nouveau dossier" sont elles équivalentes ? (Je n'ai pas n'ai pas encore eu le temps de tester ce code, ce qui va être fait dans la soirée)



Pour les 3 sous-dossiers dans le dossier daté
ATTENTION: l'espace placé dans le noms de chemins, c'est pour éviter ça 
*chemin* = le chemin du dossier d réception ("Macintosh HD:Users:mois: Desktop:jl 21-08-201317-40-36:")

*nouveauChemin* pour les sous-dossier du Dossier1 (donc en plus le nom du dossier de réception)
"Macintosh HD:Users:moi: Desktop:jl 21-08-201317-40-36: Dossier1:"

Si il faut en plus le temps dans le nom du dossier, il faut remplacer la ligne :

set date_  par celle-ci:

```
-- La date en format 19-08-201320-14-28 
set date_ to (do shell script "date +\"%d-%m-%G%H-%M-%S\"") as string
```

Code à tester depuis l'éditeur AppleScript.

@+


----------



## EliptiK001 (22 Août 2013)

Re bonjour,

Après modifications, le script convient parfaitement à ce que je pensais !! Merci beaucoup 

Une dernière question, j'ai essayer d'ajouter les sous-sous dossiers dans deux sous-dossiers, après quelques tentatives j'en suis arrivé à dupliquer l'action, ce qui marche mais ne doit pas être le plus simple, comment feriez vous ?

Ceci ne marche pas :


> -- Si c'est le sous-dossier Dossier1
> if lue is item 1* or 2* of dossiers_ then
> -- Chemin de ce sous-dossier
> set nouveauChemin to chemin & lue & ":" as string
> ...


----------



## ceslinstinct (22 Août 2013)

EliptiK001 a dit:


> Re bonjour,
> ce qui marche mais ne doit pas être le plus simple, comment feriez vous ?



Bonjours

En AppleScript, sans utiliser Automator.

Je te donne un code qui ne fera pas ce que tu recherche (c'est toi qui doit écrire le code) mais te donner des idées.

On apprend en regardant le travail des autres, non en les copiants.


```
-- La date en format 19-08-2013&#8226;20-14-28 (normalement la date du lancement du, script)
set date_ to (do shell script "date +\"%d-%m-%G&#8226;%H-%M-%S\"") as string

-- Choix du nom du dossier
set nomDossier to text returned of (display dialog "Nom du dossier" default answer "") -- Nom du dossier
-- Où placer le dossier (si c'est toujours contenu dans le même dossier, indiquer son chemin)
set destination to path to desktop -- Pour tester ce code utilisons le bureau comme dossier de reception
--set destination to choose folder with prompt "Choisissez où créer le dossier" -- Où créer le dossier

-- Ajout de la date au nom
set nomDossier to nomDossier & " " & date_ as string

-- Remplace les séparateurs : du chemin en / pour être compris par le terminal (UNIX)
set dossierMaitre to quoted form of (POSIX path of destination & nomDossier)

-- Création du dossier et de tous ces sous-dossiers
do shell script "/bin/mkdir -p " & dossierMaitre & "/{Applications,Autres,AppleScript/{Droplets,Applets}/{Bons,En*tests},Images/{Jpeg,Tiff}/{Couleurs,Noir*et*blanc}}/"

-- ATTENTION  En test dans les noms de sous-dossiers les espaces sont des espaces dur (sinon le terminal n'accepte pas il faut alors passer par des variables).

-- 17 dossiers créés en un fraction de seconde.

-- {Applications,Autres = sous dossier créés vides
-- AppleScript/{Droplets,Applets}/{Bons,En*tests} dans ce sous-dossier 2 sous-dossiers créés (Droplets,Applets) et dans ces derniers 2 sous-dossiers créés (Bons,En*tests)
-- ,Images/{Jpeg,Tiff}/{Couleurs,Noir*et*blanc}}/" même genre que la ligne précédente.

-- Donc modifier le contenu de la ligne do shell script pour obtenir le résultat recherché.
```

ATTENTION Dans le code les * sont des espaces dur, mais en faisant un copier-coller du code ça a l'air de marcher.

Si après lecture de ce code, tu trouve la solution à ton problème cela me ferais plaisir.

Sinon, j'écrit le code.

Cordialement

@+


----------



## EliptiK001 (22 Août 2013)

Non non ne vous embêtez pas, je vais chercher et farfouiller pour trouver!

Merci de votre aide!
@+

---------- Nouveau message ajouté à 15h47 ---------- Le message précédent a été envoyé à 15h46 ----------

Non non ne vous embêtez pas, je vais chercher et farfouiller pour trouver!

Merci de votre aide!
@+


----------

