IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AppleScript Discussion :

Créer un dossier avec sous dossier avec automator ou applescript


Sujet :

AppleScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Créer un dossier avec sous dossier avec automator ou applescript
    Bonjour,
    Mes recherches étant restées vaines, je viens chercher de l'aide.
    Je souhaiterais créer une action de dossier avec automator qui créerait un dossier contenant des sous dossiers (pourquoi action de dossier et non processus ? parce que je souhaite assigner à ce dossier des actions sur les fichiers qu'il recevra).
    Dans automator, j'arrive à créer un nouveau dossier à un emplacement bien précis mais je ne sais pas comment faire pour créer dans ce dossier un sous dossier ayant le nom --ENVOYES.
    J'ai essayé l'utilisation de variables avec automator, mais je patauge un peu et je me suis dis que l'applescript serait la solution.
    Pouvez-vosu m'aider ?

  2. #2
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonjour,
    Je pense avoir décrit ce que tu cherches dans un article sur les actions de dossier en Applescript, sur ce site, à cette adresse : ici

    En particulier, je me suis penché, dans l'article, sur ta question (souvent posée) : comment créer un sous dossier lors d'une action de dossier ?

    Effectivement, il y a une astuce décrite dans l'article pour éviter que l'action ne s'appelle elle même !

    Cordialement

  3. #3
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Merci, je vous tiens au courant
    Merci pour l'info. Effectivement ça à l'air assez complet et précis. Je vais essayer de l'adapter à mon cas et vous tiens informé dans le courant de la semaine prochaine.
    Merci encore.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut
    Juste pour vous tenir au courant. J'ai réussi mon premier applescript en m'inspirant du script de PBell et d'un autre trouvé sur le web. J'arrive donc à créer un (ou plusieurs dossiers) contenant des sous dossiers. La première étape est franchie.
    Merci beaucoup PBell.

    Je souhaite maintenant attribuer une action de dossier à un sous dossier créé (nom du sous dossier : "--PDF").
    J'ai créé ce processus avec automator et enregistré dans un dossier que j'ai nommé "Scripts" (il n'est donc pas rangé à l'endroit par défaut où les enregistre habituellement automator).

    Es-il possible d'appliquer cette action au sous dossier '--PDF" dès sa création ?
    En effet, ce sous dossier est destiné à recevoir des fichiers. En entrant dans ce sous dossier, je souhaite leur appliquer cette action (action que j'ai nommée "ActionDossier-ASSISTANTES.scpt")

    Ci-dessous le code utilisé pour la création du sous dossier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make new folder at folder "PUB" of folder nouveau_dossier_client of folder "AFC" of folder "ASSISTANTES" of folder "SAVE" with properties {name:"--PDF"}
    Si quelqu'un peut m'aider ?

  5. #5
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonjour Pierre,
    Les actions de dossiers étant gérées directement par le système, les scripts correspondant doivent obligatoirement être à la place indiquée dans l'article (il y a une place pour les scripts et une pour les actions Automator). je ne connais pas d'autre alternative

    Donc ton script doit obligatoirement être stocké là où il faut.
    Cependant, tu peux essayer en y mettant un alias (qui pointe vers ton script là où il est). Je n'ai pas essayé... A toi de voir.
    Mais il est aussi simple d'y mettre ton script plutôt que d'y créer un alias qui pointe vers ton script. Bouger/dupliquer un fichier est simple avec AS !

    Pour ce faire, toujours dans le même article, le second script du II-a permet l'ajout d'un script action de dossier en bonne place. Tu peux t'en inspirer connaissant où est ton script d'action de dossier (tu évites la saisie du nom du script à installer comme dans l'exemple).

    Par ailleurs, Oui, il est très facile d'assigner une action de dossier par script à ton nouveau dossier --PDF.
    Toujours dans le même article, un script qui fait la même chose est décrit en III-b

    Cordialement

  6. #6
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Je bloque... Pas très fort en Applecript
    Bonsoir,
    Je bloque et n'arrive pas à résoudre mon problème.
    Le voici :
    J'arrive à créer un dossier (variable = Nouveau_dossier_client) contenant, entre autre, un sous-dossier nommé --PDF. Ce dossier est destiné à recevoir des fichiers.
    Ce que je voudrais :
    Dès l'ajout du premier fichier pdf dans ce dossier "--PDF", assigner à ce dossier une action de dossier ayant les 3 actions suivantes :
    1- Créer d'abord un dossier à l'emplacement :
    Save/Assistantes/AFC/Nouveau_dossier_client (donc créer un dossier contenant le même nom que celui créé précedemment mais placé à un autre endroit). Ce nouveau dossier devrait contenir un sous-dossier appelé --ENVOYES
    2- Dupliquer le fichier pdf, le renommer (avec BD-) devant le nom
    3- Déplacer la copie allégée dans le dossier Nouveau_dossier_client du disque Save.

    Ce que je souhaite, c'est automatiser au maximum les choses. Dans votre script PBell, il y a une boite de dialogue qui sert à l'utilisateur à sélectionner les dossiers de destination mais je voudrais éviter cela.
    Je pense arriver à réaliser le point n°2 (grâce à un processus Automator).
    Mais pour les points n°1 et 3, je pense que la solution est applescript.

    J'espère avoir été clair et si vous pouvez m'aider vous trouverez ci-dessous mon code actuel.

    Merci de votre aide.
    (j'espère avoir bien utiliser les instructions du modérateur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    -- Nommer le dossier créé
    set nouveau_dossier_client to text returned of (display dialog "Nouveau nom de ce dossier ?" default answer "" buttons {"Annuler", "Ce nom est TOP"} default button 2 with title "VOTRE CHOIX" with icon note giving up after 20)
     
     
    -- Création du Dossier Parent chez les GRAPHISTES
     
    tell application "Finder"
    activate
    make new folder at folder "AFC" of folder "ActionDossier-TravauxEnCours" of folder "TRAVAUX" of startup disk with properties {name:"X-" & nouveau_dossier_client}
    set name of folder ("X-" & nouveau_dossier_client) of folder "AFC" of folder "ActionDossier-TravauxEnCours" of folder "TRAVAUX" of startup disk to nouveau_dossier_client
     
    -- Création du sous-dossiers du Dossier Parent chez les graphistes
     
    make new folder at folder nouveau_dossier_client of folder "AFC" of folder "ActionDossier-TravauxEnCours" of folder "TRAVAUX" of startup disk with properties {name:"PUB"}
     
    make new folder at folder "PUB" of folder nouveau_dossier_client of folder "AFC" of folder "ActionDossier-TravauxEnCours" of folder "TRAVAUX" of startup disk with properties {name:"--PDF"}
     
     
     
    -- Création du Dossier Parent chez les graphistes
    display dialog "Le dossier " & nouveau_dossier_client & " a été créé pour les GRAPHISTES buttons {"OK"} default button 1 with icon 1
     
    end tell

  7. #7
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonjour,

    Nous allons donc décomposer le problème en 2 parties :
    A) un script que tu pourras lancer à la création d'un client
    B) un script d'action de dossier à installer une fois pour toutes


    A) Script à la création d'un nouveau client.
    Je te conseille de mettre ce script dans le dossier "Scripts" de ta Bibliothèque et de cocher, dans l'Editeur de Script / Préférences / General, la case "Afficher le menu des scripts". Tu pourras ainsi lancer ce script via le menu en forme de parchemin qui va apparaître en haut à droite de ton écran.

    Ce script demande l'emplacement où créer le dossier client, demande son nom (le nom du client à priori ?), vérifie que ce dossier n'existe pas déjà, puis le crée. Il crée ensuite un sous dossier "--PDF" auquel il associe une action de dossier prédéfinie (variable Action).
    Le voici avec des commentaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    -- Script permettant la création d'un dossier client
     
    -- 1 Saisie de l'emplacement
    -- 2 Saisie du nom du dosser (le nom du client ?)
    -- 3 création de ce dossier et création d'un sous dossier "--PDF"
    -- 4 assignation à ce sous dossier PDF d'une action de dossier préalablement enregistrée
     
    set Action to "Action PDF" -- le nom de l'action de dossier enregistrée dans Bibliothèque / Scripts / Folder Action Scripts
     
    tell application "Finder"
    	set Emplacement to choose folder with prompt "Sélectionnez l'emplacement de votre dossier client"
    	set Dos_Emp to Emplacement as string
     
    	-- boucle de saisie du nom de client jusqu'à ce que Mon_OK soit vrai (= la saisie n'est pas vide et la dossier n'existe pas déjà)
    	set Mon_OK to false
    	repeat until Mon_OK
    		set Nom_Client to "Nom_Client"
    		set Saisie to (display dialog "Saisissez le nom du client" default answer Nom_Client)
    		set Nom_Client to text returned of Saisie
    		if not (Nom_Client is "") then if not (exists (Dos_Emp & Nom_Client)) then set Mon_OK to true
    		if not Mon_OK then display dialog "Le nom saisi est vide ou ce nom existe déjà !" & return & "Veuillez resaisir un nom."
    	end repeat
     
    	-- création du dossier client et sous dossier "--PDF"
    	set D_Client to make new folder in Emplacement with properties {name:Nom_Client}
    	set D_PDF to make new folder in D_Client with properties {name:"--PDF"}
    end tell
     
    -- Assingation de l'action de dossier au dossier "--PDF"
    -- Récupération du chemin par défaut des Folder Action Scripts dans le domaine utilisateur
    tell application "System Events" to set Dossier_Scripts to (path to Folder Action scripts folder from user domain) as string
    set Mon_Script to (Dossier_Scripts & Action)
    -- vérification que le script prédéfini existe. Sinon, on quitte le script !
    tell application "Finder"
    	if not (exists file Mon_Script) then return
    end tell
    tell application "System Events" to attach action to D_PDF as alias using (Mon_Script as string)
     
    activate -- permet de remettre le script au premier plan pour voir le dialog.
    display dialog "Le dossier client " & Nom_Client & " est crée avec succès !" buttons {"OK"} default button 1 giving up after 3

    B) Le second script est l'action de dossier proprement dite.
    Pour ce dernier, tes derniers commentaires me font douter.
    Prenons un exemple :
    Soit un dossier client "Toto" avec sous dossier "--PDF" dans lequel on va ajouter un fichier "Fichier_Test".
    Il y a par ailleurs un dossier AFC (chemin Save:Secretaire/AFC") qui existe.

    Lors de l'ajout de "Fichier_Test", le script vérifie dans le dossier AFC si un dossier "Toto" existe (sinon, le crée) avec un sous dossier "Envoyes" dans lequel j'ajoute "Fichier_Test" en changeant son nom en "BD-Fichier_Test".
    donc à la fin on a : AFC / Toto / Envoyes / BD-Fichier_Test

    Compte tenu de tes derniers commentaires, je me demande si, en fait, tu ne veux pas finir avec : AFC / "nouveaux clients" / Envoyes / DB-Fichier_Test
    ("nouveaux clients" étant, je suppose, un sous dossier déjà crée ?).

    J'ai suffisamment commenté le script ci-dessous pour pouvoir adapter au second cas si nécessaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    -- Script à enregistrer dans Bibliothèque / Scripts / Folder Action Scripts
    -- On suppose, dans le second script que celui-ci s'appelle "Action PDF"
     
    on adding folder items to Mon_Dossier after receiving Liste_Fichiers
     
    	-- bien définir le nom du chemin selon qu'il s'agit d'un disque distant ou d'un dossier sur le même disque !
    	-- par exemple : Set Chemin_AFC to "Volumes:Mon_Disque_Serveur:Users:Nom_user:Save:Assistantes:AFC:"
    	set Chemin_AFC to "Save:Assistantes:AFC:"
     
    	tell application "Finder"
    		set Dos_client to container of Mon_Dossier -- lit de dossier parent du dossier dans lequel on a déposé les fichiers
    		set Nom_Client to name of Dos_client
    		repeat with Fichier in Liste_Fichiers -- boucle car il est possible que l'on aie déposé plusieurs fichiers !
    			set Nom_Fichier to name of Fichier
    			-- Si le dossier Nom_Client dans le dossier AFC n'existe pas : on le crée
    			if not (exists (Chemin_AFC & Nom_Client)) then make new folder in Chemin_AFC with properties {name:Nom_Client}
    			-- le dossier "Envoyes" dans le dossier Client dans le dossier secretaire n'existe pas : on le crée
    			if not (exists (Chemin_AFC & Nom_Client & ":Envoyes")) then make new folder in (Chemin_AFC & Nom_Client) with properties {name:"Envoyes"}
    			set N_Fichier to duplicate Fichier to folder (Chemin_AFC & Nom_Client & ":Envoyes") --copie du fichier initial vers Chemin_AFC : Nom_Client : "Envoyes"
    			set name of N_Fichier to "BD-" & Nom_Fichier -- renomme le fichier copié avec "BD-" devant le nom initial
    		end repeat
    	end tell
    end adding folder items to
    Attention : ce script doit être enregistré en action de dossier, avec le nom "Action PDF" (voir le premier script). Par ailleurs, il est probable qu'il faille ajuster le chemin de dossier AFC.
    En effet ce chemin dépend où est le dossier "secretaires".
    Si il est sur un serveur distant, le chemin doit probablement commencer par "Volumes:...".
    Si il est sur un user Mac, le chemin est Disque/Users/Mon_User/...
    A toi de l'adapter !

    Bon courage

  8. #8
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Quelle rapidité
    Salut PBell,

    J'ai parcouru rapidement ton message et le dissequerais ce w.e. Merci pour ta rapidité. Je te tiens au courant.
    En tout cas, c'est hyper sympa de ta part.
    A bientôt.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Super le script
    Salut PBell,

    Tes 2 scripts fonctionnent à merveille, toutefois en voulant l'adapter à mon cas, je me retrouve bloquer (et oui, encore). En fait, j'ai surtout travailler pour l'instant sur le 1° script.
    Au début de celui-ci tu fais ouvrir une fenêtre pour recherche le dossier d'enregistrement. Or dans mon cas, tous les dossiers créés seront enregistrés au même endroit, donc je voudrais passer directement à l'étape de nommer le nom du fichier. Il faudrait donc définir une fois pour toute le chemin d'accès au dossier d'enregistrement (qui s'appelle chez moi "AFC").
    Alors voici ce que j'ai fais (il y a sans doute une façon plus académique de le faire mais je fais avec mes moyens limités en applescript).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    set Action to "Action PDF" -- le nom de l'action de dossier enregistrée dans Bibliothèque / Scripts / Folder Action Scripts
     
    tell application "Finder"
     
    	set Emplacement to "HHD:TRAVAUX:ActionDossierTravauxEnCours:AFC"
    	set Dos_Emp to Emplacement as string
     
     
    	-- boucle de saisie du nom de client jusqu'à ce que Mon_OK soit vrai (= la saisie n'est pas vide et la dossier n'existe pas déjà)
    	set Mon_OK to false
    	repeat until Mon_OK
    		set Nom_Client to "Nom_Client"
    		set Saisie to (display dialog "Saisissez le nom du client" default answer Nom_Client)
    		set Nom_Client to text returned of Saisie
    		if not (Nom_Client is "") then if not (exists (Dos_Emp & Nom_Client)) then set Mon_OK to true
    		if not Mon_OK then display dialog "Le nom saisi est vide ou ce nom existe déjà !" & return & "Veuillez resaisir un nom."
    	end repeat
     
    	-- création du dossier client et sous dossier PUB avec ses sous-dossiers dont "--PDF"
     
    	-- création du dossier client
    	set D_Client to make new folder of "HDD:TRAVAUX:ActionDossierTravauxEnCours:AFC" with properties {name:Nom_Client}
     
    	-- création du sous dossier PUB avec ses sous-dosiers dont "--PDF" Couleur etiquette different pour "--PDF"
    	make new folder of "HDD:TRAVAUX:ActionDossierTravauxEnCours:AFC:Nom_Client" with properties {name:"PUB"}
    	set D_PDF to make new folder of "HDD:TRAVAUX:ActionDossierTravauxEnCours:AFC:Nom_Client:PUB" with properties {name:"--PDF"}
    	set label index of D_PDF to 6
    	set Validation_PUB to make new folder of "HDD:TRAVAUX:ActionDossierTravauxEnCours:AFC:Nom_Client:PUB" with properties {name:"VALIDATION"}
    	set label index of Validation_PUB to 2
    	make new folder of "HDD:TRAVAUX:ActionDossierTravauxEnCours:AFC:Nom_Client:PUB" with properties {name:"LINKS"}
    	make new folder of "HDD:TRAVAUX:ActionDossierTravauxEnCours:AFC:Nom_Client:PUB" with properties {name:"INDIVIDUELLES"}
    Et ça marche parfaitement tant que je laisse comme nom de dossier Nom_Client mais quand j'indique un autre nom, ça ne marche pas. En fait, il faudrait ajouter au chemin le nom de dossier choisi. Or je ne sais pas inclure dans un chemin d'accès le nom d'une variable.
    D'ailleurs, est-ce possible ?

    Si tu avais quelques minutes pour m'aider, ce serait super.

    A bientôt.

  10. #10
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonjour,

    Tout d'abord tu peux réduire les lignes 5 et 6 de ton script en une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Dos_Emp to "HHD:TRAVAUX:ActionDossierTravauxEnCours:AFC"
    Dans le code initial, il y a vait 2 lignes car il fallait convertir un alis (le dossier choisi) en sa valeur string. Ici, tu affectes Dos_Emp en string directement.

    Pour le Nom_Client, je pense que tu veux dire que ton problème est à la ligne 25 ?
    Nom_Client est une variable, donc peu importe sa valeur (du moment qu'elle est un nom valide pour le Finder !).
    Comme Dos_Emp est déjà assigné, utilises cette variable, ton script sera plus facile à adapter dans le futur.
    Donc la ligne 22 devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set D_Client to make new folder in (Dos_Emp as alias) with properties {name:Nom_Client}
    A la ligne 22 le nouveau dossier ainsi crée, quelque soit son nom client, est assigné à la valeur D_Client. Donc, la ligne 25 devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set D_Pub to make new folder in D_Client with properties {name:"PUB"}
    Tu assignes ainsi D_Pub à la valeur de ton nouveau dossier, ce qui permet de ré-utiliser ce dossier en ligne 26
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set D_PDF to make new folder in D_Pub with properties {name:"--PDF"}
    Utilises ainsi de suite la même méthode pour les lignes 29 à 31 !

    Enfin, petit test à faire de ton côté (désolé je dois aller au marché tout de suite !), je pense que la ligne 29 peut être intégrée à la 28. Je te laisse tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set D_PDF to make new folder D_Pub with properties {name:"--PDF", label index : 6}
    Cordialement

  11. #11
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Re-Bonjour,
    Suite à ma réponse de ce matin, j'ai fait un petit test et, curieusement, l'ajout de la propriété label index directement comme propriété du "make" ne fonctionne pas (un bug sans doute !), donc il faut le garder sur une ligne séparée.

    Outre mes remarques de ce matin, j'ajoute quelques conseils pour toi et tous les programmeurs débutants :

    1) mettre les valeurs fixes des variables (cela s'appelle des constantes !) en tête de programme. Cela permettra, par la suite, une maintenance plus aisée. Par exemple, si un jour tu veux modifier le chemin du dossier APC, tu n'aura qu'à le faire q'une seule fois dans le script, c'est plus simple.
    C'est une pratique si bonne que Apple en a fait un concept de base depuis 1984 ! Toutes les valeurs fixes sont dans des ressources séparées des programmes. Il est ainsi facile de les modifier sans même avoir le code source des programmes (Resources fork dans les systèmes jusqu'à 9 et depuis, fichiers strings pour toutes les textes et plist pour le reste, depuis OS X)

    2) il faut bien distinguer un alias (qui est un objet = dossier ou fichier) et son nom. Par exemple, dans ton script, "HDD:TRAVAUX:....AFC" est la valeur texte de l'objet. ("HDD:...AFC" as alias) est bien un objet (c'est le but du "as alias" !).
    Applescript manipule selon les instruction, des textes ou des objets/ le "Set D_Client to make new folder..." affecte bien un objet dossier à la variable D_Client. Il est ensuite possible de faire référence à cet objet.

    3) N'hésite pas à mettre des commentaires ! Cela peut paraître fastidieux voir redondant, mais l'expérience prouve que ce n'est jamais trop ! Lorsque toi (ou pire, un autre !) reviendra sur ce script dans 1 an ou 2, les commentaires seront plus qu'utiles !


    Ceci étant précisé, voici ton programme modifié (j'ai compris que tu avais désormais plus de sous dossiers que ta demande initiale !).
    Ici, il n'y a plus un seul texte fixe au delà de la ligne 10 du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    set Action to "Action PDF" -- le nom de l'action de dossier enregistrée dans Bibliothèque / Scripts / Folder Action Scripts
    set Dos_Emp to "HHD:TRAVAUX:ActionDossierTravauxEnCours:AFC"
     
    set N_Pub to "PUB" -- Nom du sous dossier du dossier client
    set N_PDF to "--PDF" -- Nom du sous dossier du sous dossier PUB du dossier client
    set C_PDF to 6 -- Index couleur du sous dossier PDF
    set N_Valid to "VALIDATION" -- Nom du sous dossier du sous dossier PUB du dossier client
    set C_Valid to 2 -- Index couleur du sous dossier Valid
    set N_Links to "LINKS" -- Nom du sous dossier du sous dossier PUB du dossier client
    set N_Indiv to "INDIVIDUELLES" -- Nom du sous dossier du sous dossier PUB du dossier client
     
    tell application "Finder"
    	-- boucle de saisie du nom de client jusqu'à ce que Mon_OK soit vrai (= la saisie n'est pas vide et la dossier n'existe pas déjà)
    	set Mon_OK to false
    	repeat until Mon_OK
    		set Nom_Client to "Nom_Client"
    		set Saisie to (display dialog "Saisissez le nom du client" default answer Nom_Client)
    		set Nom_Client to text returned of Saisie
    		if not (Nom_Client is "") then if not (exists (Dos_Emp & Nom_Client)) then set Mon_OK to true
    		if not Mon_OK then display dialog "Le nom saisi est vide ou ce nom existe déjà !" & return & "Veuillez resaisir un nom."
    	end repeat
     
    	-- création du dossier client et sous dossier PUB avec ses sous-sous-dossiers PDF, Validation, Link et Individuelles
     
    	set D_Client to make new folder in (Dos_Emp as alias) with properties {name:Nom_Client} -- création du dossier client
    	set D_Pub to make new folder in D_Client with properties {name:N_Pub} -- création du sous dossier PUB
    	set D_PDF to make new folder in D_Pub with properties {name:"--PDF"}
    	set label index of D_PDF to C_PDF
    	set D_Valid to make new folder in D_Pub with properties {name:N_Valid}
    	set label index of D_Valid to C_Valid
    	make new folder of D_Pub with properties {name:N_Links}
    	make new folder of D_Pub with properties {name:N_Indiv}
    end tell
     
     
    -- Assignation de l'action de dossier au dossier "--PDF"
    -- Récupération du chemin par défaut des Folder Action Scripts dans le domaine utilisateur
    tell application "System Events" to set Dossier_Scripts to (path to Folder Action scripts folder from user domain) as string
    set Mon_Script to (Dossier_Scripts & Action)
    -- vérification que le script prédéfini existe. Sinon, on quitte le script !
    tell application "Finder"
    	if not (exists file Mon_Script) then return
    end tell
    tell application "System Events" to attach action to D_PDF as alias using (Mon_Script as string)
     
    activate -- permet de remettre le script au premier plan pour voir le dialog.
    display dialog "Le dossier client " & Nom_Client & " est crée avec succès !" buttons {"OK"} default button 1 giving up after 3
    Cordialement

  12. #12
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Ça marche super...
    Salut PBell,

    Ton dernier message a résolu tous mes problèmes quant au 1° script.
    Je vais me pencher sur le 2° script et je repointerai mon nez si j'ai un soucis.
    En tout cas, bien ton astuce consistant à définir une 1° variable avec un chemin d'accès puis te servir de cette variable pour définir les autres chemins. C'est une méthode que j'utiliserais à l'avenir car étant débutant en applescript je ne sais pas trop comment procéder.
    A bientôt.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Test sur 2° script
    Bonjour,
    J'ai travaillé sur le 2° script de PBell qui marche très bien mais pour l'adapter à mon cas j'ai essayé de le modifier mais sans succès.
    Comme prévu, à l'ajout d'un fichier dans le dossier Nom_Client/PUB/--PDF, se crée un dossier dans "Save:Assistantes:AFC:" qui porte le nom du dossier parent, donc le nom PUB. Or je souhaiterais qu'on puisse remonter d'un cran pour que le dossier créé s'appelle Nom_Client (qui est le container de PUB lui même container de --PDF). Penses-tu que cela est possible ?
    J'ai essayé d'intervenir sur les 2 lignes ci-dessous mais en vain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	set Dos_client to container of Mon_Dossier -- lit de dossier parent du dossier dans lequel on a déposé les fichiers
    		set Nom_Client to name of Dos_client
    Par ailleurs, le nouveau dossier créé (qui portera donc le même nom que le dossier Nom_Client) doit comporter un sous-dossier "ENVOYE" mais les fichiers ne doivent pas entrer dans ce sous-dossier, ils doivent resté à la racine du dossier Nom_Client (en fait on peut considéré que ce sous-dossier ne sert à rien mai il faut qu'il y soit (bizarre... mais je me comprend).

    PBell, si tu as la réponse à mes 2 soucis, je suis preneur

  14. #14
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonjour,
    Tout d'abord, la réponse à la question "est-ce possible" est OUI !
    Forcément, il y a une solution qui ne doit pas être bien compliquée.

    Pour la mettre en oeuvre, il faut être sûr de bien comprendre.
    C'est dans le script d'action de dossier qu'il faut modifier : c'est clair !

    Le script se déclenche à l'ajout dans Dossier_Client / PUB / --PDF.
    il ajoute pour l'instant un dossier dans AFC avec le nom "PUB" et tu veux qu'il se nomme "Dossier_Client". Donc en décomposant :

    L'action de dossier est sur Mon_Dossier qui est "--PDF"
    Son container est "PUB" et le container de "PUB" est "Dossier_Client".
    Pour avoir son nom, il suffit donc de prendre le container du container !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tell application "Finder"
    set Dos_client to container of  container of Mon_Dossier -- lit de dossier parent du parent du du dossier dans lequel on a déposé les fichiers
    set Nom_Client to name of Dos_client
    end tell
    Cordialement

  15. #15
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Merci encore, tu me sauves...
    Salut PBell,

    Dans la vie,il y a ceux qui maîtrisent et il y a ceux qui pataugent.
    Moi, je fais partie de la 2° catégorie et toi de la 1°, c'est là notre différence.

    Merci pour tout, ça fonctionne comme je le voulais, c'est parfait bien que parfois le même fichier est en double : celui portant le nom original et celui avec le BD devant. Ce n'est pas tout le temps mais ça arrive quelque fois. Je mets ça sur le compte d'un problème matériel (ma session Leopard est sur DD externe, donc ça pourrait peut être expliquer ces dysfonctionnements).
    En tout cas merci pour tout et je vais de ce pas te mettre un pouce vert de plus.

    A bientôt.

  16. #16
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonjour,
    Nous avons tous pataugé un jour sur certains domaines.
    Je dirai plutôt qu'il y a ceux que se contentent de patauger et ceux qui décident de progresser. Ta présence sur ce forum te classe dans la seconde catégorie !

    Quant au nom parfois en double, il peut y avoir des explications:
    Lorsque le fichier est copié avec BD- devant, en fait cela se passe en 2 étapes :
    1) copie du fichier avec le même nom
    2) ajout de BD- devant

    Il est possible que la copie se passe mal, ou lentement.
    Sur certains serveurs distants, il peut même se faire que la seconde étape plante (ce que tu ne vois pas car le script action de dossier est en tâche de fond) car le fichier n'est pas encore là.
    Il y a des techniques (décrites dans l'article sur les actions de dossier) pour forcer Applescript à attendre la fin de la copie avant de changer de nom.

    Si ce n'est pas trop fréquent, OK, sinon, il faut envisager une modification du code entre l'action "Set N_Fichier to duplicate..." et l'action "set name...".

    il faut ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	-- attente de fin de téléchargement (vérification que la taille ne change plus)
    	try
    		set OldSize to -1
    		repeat until (size of N_Fichier) = OldSize
    			set OldSize to (size of N_Fichier)
    			delay 0.5
    		end repeat
    	end try
    Ce morceau de code boucle tant que la taille du fichier (sur le dossier destinataire de la duplication) change. Lorsque cette taille ne change plus..s'est que la copie est terminée.
    Si c'est un DD externe, même lent, c'est OK. Si c'est un serveur distant avec une liaison vraiment chaotique, alors il se peut que les temps d'attente entre paquets soient supérieur à 0.5 seconde. Il faudra changer le "delay 0.5" en "delay 1" par exemple.
    Au delà, il faut se préoccuper de la vitesse de transfert !!
    Bonne journée

  17. #17
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Dernière info...
    Salut PBell,

    J'ai incorporé tes dernières lignes de code mais toujours même soucis. Des ça marche et des fois pas, autrement dit des fois le fichier se renomme avec BD- devant, des fois je me retrouve avec 2 fichier, celui portant le nom original et celui avec le BD- devant. J'ai portant passé le Delay sur 1 mais rien ne change.
    Bref, peut-être que finalement je ne renommerais pas les fichiers.
    C'est vrai que ma session Leopoard étant sur DD externe et exécutant tous ces scripts sur Leopard, le système s'emmêle peut-être les pinceaux.

    Dernière demande d'aide si je peux me permettre :
    Je souhaiterais inclure dans l'action de dossier Action PDF une action que j'ai définie sur automator. il s'agit de la lgine suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set nomProcessus to (((path to workflows folder from user domain) as string) & "PDFLight.app")
    En général rien ne se passe, le script s'execute sans tenir compte de cette ligne, ou alors le srcipt ne s'exécute pas du tout (sans doute parce que je place cette ligne au mauvais endroit.
    En fait je voudrais alléger la taille de mon fichier PDF entrant grâce à ce processus automator.

    Comment faire en sorte pour inclure cette action supplémentaire dans l'action de dossier PDF ?

  18. #18
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonsoir,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set nomProcessus to (((path to workflows folder from user domain) as string) & "PDFLight.app")
    Cette instruction ne fait rien d'autre que d'affecter à la variable NomProcessus, le nom de ton application avec son chemin. Elle ne la lance pas !

    Pour lancer une application tu peux faire un "open".

    Tu peux aussi passer via Unix avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Di shell script "automator xxx.workflow"
    Si ton Automator est un workflow.

    Mais il faut voir comment éventuellement passer des variables (ton fichier) au flux Automator.

    Cordialement

  19. #19
    Membre à l'essai
    Homme Profil pro
    Graphiste
    Inscrit en
    Décembre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Graphiste
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2013
    Messages : 82
    Points : 24
    Points
    24
    Par défaut Je m'en doutais...
    Merci PBell pour ta rapidité dans les réponses (en ce moment je suis un peu à la rue entre le boulot et mon gamin (il faut l'occuper, soit parce qu'il est malade, soit parce qu'il va mieux et veut faire du Tracto pelle amené par le papa noël...).
    Bref, peu de temps en ce moment mais je me doutais de ta réponse.
    Comme je veux automatiser un maximum (avec un minimum d'intervention humaine), l'idéal serait d'enchainer les 2 actions de dossier :
    L'action de dossier "Action PDF" qui transfère et renomme les fichiers entrants dans le dossier Save:Assistantes:AFC:Nom_Client et l'action de dossier "PDFLight.app" faite sur automator qui me permet d'alléger en poids les fichiers.
    J'essaye donc sur le fichier Action PDF.scpt d'inclure le script automator mais ça ne marche pas.
    Je ne sais pas si on peut inclure dans le même script 2 actions du type "on add item...." ou si on doit faire 2 fichiers scripts différents qui s'enchainent l'un après l'autre... bref je bidouille...
    D'après toi, comment dois-je procéder ?

    A bientôt...

  20. #20
    Membre éprouvé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 603
    Points : 1 240
    Points
    1 240
    Par défaut
    Bonsoir,
    Le plus simple est certainement d'inclure ton process Automator PDF dans l'action de dossier.

    Applescript permet d'appeler une action automator (do shell script "automator xxx.workflow", avec xxx étant le nom de ton process Automator).
    J'avoue ne plus me souvenir comment lui indiquer les paramètres - les fichiers PDF à compresser - , mais on doit retrouver ça sur Google.

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Batch] overwrite MOVE dossier et sous dossier avec fichiers
    Par sencha dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 14/03/2015, 18h20
  2. Réécriture d'URL avec sous dossier
    Par cedrick21 dans le forum Apache
    Réponses: 1
    Dernier message: 12/12/2014, 19h17
  3. Include avec sous dossiers
    Par anto2b dans le forum Langage
    Réponses: 4
    Dernier message: 24/04/2013, 19h43
  4. [Snow Leopard] Problème de droits avec un dossier, ses sous-dossier et ses fichiers
    Par rambc dans le forum Apple
    Réponses: 21
    Dernier message: 07/03/2010, 10h18
  5. lister un répertoire avec sous-dossiers
    Par helene_53 dans le forum Général Java
    Réponses: 7
    Dernier message: 27/03/2008, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo