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 :

Chemin dossier relatif


Sujet :

AppleScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Chemin dossier relatif
    Salut

    Je me rends fou sur internet pour trouver la façon de déplacer un fichier d'une image disque montée vers un dossier relatif de l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    set source to "Untitled:myfile.ppt"
    set destination to path to "~/Library/Application\\ Support"
     
    tell application "Finder"
    	move file source to folder destination with replacing
    end tell
    Ca me renvoie l'erreur -1700 comme quoi il est impossible de rendre en type constant ~/Library/Application\\ Support

    Si vous pouviez m'aider, le script est bien sur un exemple

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Résolu
    Jai réussi en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    set source to "Untitled:myfile.ppt"
     
    set home to path to home folder
    set receiver to alias ((home as text) & "Library:Application Support")
     
    tell application "Finder"
    	move file source to folder receiver with replacing
    end tell
    Par contre, ce faisant, le chemin de l'image disque sera toujours bonne ? Ou bien faut il lui donner une variable relative également de type /volumes/untitled ?

    Merci

  3. #3
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    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 : 606
    Par défaut
    Bonjour,
    Il y a encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    set Destination to (path to application support from user domain) as string
     
    set Source to "Untitled:myfile.ppt"
     
    tell application "Finder" to duplicate Source to Destination with replacing
    L'avantage est que ce chemin Destination fonctionnera toujours.
    Le "duplicate" à la place du "move" est aussi plus sûr, dans le cas ou le fichier se retrouverai sur le même disque.

    Pour la variable Source, j'ai l'impression que tu cherches à installer toujours le fichier myfile à partir d'un volume séparé type clé USB (genre installation sur plusieurs postes à la chaîne !).
    Si je ne me trompe pas, tu as beaucoup plus élégant et sûr pour faire ce genre de chose :

    1) tu changes l'affectation de la variable Source par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set Source to ((path to me) as string) & "Contents:Resources:myfile.ppt"
    2) tu enregistres ce script sous forme application (voir en bas du dialogue "Enregistrer sous…")
    3) dans l'application ainsi créée, click droit, "Ouvrir le paquet" et tu viens mettre ton fichier myfile.ppt dans le sous dossier Resources du sous dossier "Contents" du paquet.

    Ainsi, le script de ton application contient toujours ton fichier lui-même et quelque soit la configuration du Mac sur lequel tu installes, quelque soit le nom de la clé ou du volume (via réseau par exemple), le script fonctionne toujours !! Tu peux même l'envoyer par email à tes utilisateurs en leur demandant de simplement double cliquer dessus pour installer !

    Cordialement

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Nickel mais
    Salut PBELL

    Ouais, tu as raison c'est plus propre ! ET le fait qu'il soit dans l'application est top !

    Par contre, le probleme c'est que je veux l'envoyer dans un autre dossier que application support sur tous ces ordinateurs, à savoir dans le dossier Screen Savers. Donc en chemin variable pour qu'il soit accessible.

    Application support et d'autres dossiers types ça marche, mais Screen Savers je n'y accède pas :s

    Merci pour ton aide

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Résolu
    Non, c'est bon, ça fonctionne aussi avec Screen Savers, autant pour moi !


    Merci, bonne journée

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Code complet mixé
    Rebonjour, au fait, je me rends compte que j'ai dut faire un mix des 2 codes pour que cela fonctionne chez moi.

    Je le mets au cas où quelqu'un le voudrais, car j'en ai vu plusieurs qui cherchaient à faire ça sur le web.

    1 - Taper le code suivant dans Applescript en remplaçant vos valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    set Source to ((path to me) as string) & "Contents:Resources:myFile.doc"
     
    set home to path to home folder
    set receiver to alias ((home as text) & "Library:Screen Savers")
     
    tell application "Finder"
    	move file Source to folder receiver with replacing
    end tell
    2 - Enregistrer le script sous forme d'application

    3 - Mettre le fichier myFile.doc dans le dossier ressources du dossier contents accessible en faisant un clic droit 'afficher le paquet"

    Merci encore à PBELL pour son aide

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Ajouter un check if folder exists
    Salut, je reviens sur le code car j'ai un autre soucis.

    Je voudrais juste mettre un check if folder exist avant de faire la copie et d'en creer un au besoin mais ça ne marche pas. Il me renvoie que l'alias n'existe pas.

    Voici le 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
     
     
    set Source to ((path to me) as string) & "Contents:Resources:myfile.saver"
     
    set home to path to home folder
    set receiver to alias ((home as text) & "Library:Screen Savers")
     
    tell application "Finder"
     
    	activate
     
    	if not (exists folder receiver) then
    		make new folder at home with properties {name:receiver}
    		move file Source to folder receiver with replacing
    		display dialog "Screensaver folder was created and the screensaver was installed" buttons {"OK"} default button 1
    	else
    		move file Source to folder receiver with replacing
    		display dialog "Screensaver is installed now" buttons {"OK"} default button 1
     
    	end if
     
    end tell
    J'ai essayé également en ajoutant as text dans {name:receiver as text} mais j'obtiens la même chose :s

    Si quelqu'un avait un idée ?

    Merci

  8. #8
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    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 : 606
    Par défaut
    Bonjour,
    Ne t'inquiète pas, c'est erreur classique entre alias et texte.

    De plus la variable receiver contient "~library:Screen Savers" ce qui ne peut être un nom valide de dossier ! (pas de ":")

    Le code correct est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set Ma_Lib to (path to library folder from user domain) as string
    set Mon_Screen to "Screen Savers"
     
    tell application "Finder"
    	activate
    	if not (exists (Ma_Lib & Mon_Screen)) then
    		make new folder in Ma_Lib with properties {name:Mon_Screen}
    		move file Source to folder (Ma_Lib & Mon_Screen) with replacing
    	end if
    end tell
    En plus la constante Mon_Screen est assignée une seule fois en début de script... cela simplifiera la maintenance.
    Cordialement

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Oui !
    Mais on est d'accord que je rajoute quand même un "else if" après le "if" afin qu'il me l'installe quand même dans le dossier Screen Saver si celui-ci existe déjà !?

    Ca fonctionne quand je le rajoute mais je voulais être certain de bien comprendre.


  10. #10
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    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 : 606
    Par défaut
    Bonsoir,
    Oui, bien sûr dois garder le "else if".
    J'avais mis mon exemple sans ce "else if" juste pour te faire comprendre l'utilisation des chemins.

    Comme maintenant tu deviens plus expert en Applescript (si, si !), tu peux encore pousser le bouchon plus loin !
    Par exemple, ne pas mettre le "Else" if du tout et sortir le "move" du "if".

    Donc si le dossier n'existe pas tu le crée. Sinon tu ne fais rien.
    Puis, dans tous les cas, tu fais le move et tu indiques que tout s'est bien passé ! En fait l'utilisateur se moque de savoir si tu as du ou pas créer le dossier.
    Ce qu'il veut c'est que l'installation soit faite. Non ?

    Voici ce que cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    set Ma_Lib to (path to library folder from user domain) as string
    set Mon_Screen to "Screen Savers"
     
    tell application "Finder"
    	activate
    	if not (exists (Ma_Lib & Mon_Screen)) then make new folder in Ma_Lib with properties {name:Mon_Screen}
    	move file Source to folder (Ma_Lib & Mon_Screen) with replacing
    	display dialog "Screensaver is installed now" buttons {"OK"} default button 1
    end tell
    Conseil du jour : Un code lisible et minimaliste est toujours un bon code !
    Félicitations pour ton premier programme !

    Cordialement

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Merci
    Un grand merci pour ton aide ! Une femme qui sait aussi bien coder que toi serait la femme parfaite

    C'est propre
    Oui comme ça pas besoin de mettre le 'else' ! C'est nickel !

    Par contre, si je voulais copier 2 fichiers depuis le dossier ressources de l'application.
    J'ai crée un dossier dans ressources nommé Container et j'ai essayé 2 méthodes mais aucune ne fonctionne :s

    Désolé, j'ai changé les noms des 'set to'

    Methode 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    set Source to ((path to me) as string) & "Contents:Container"
     
    set Mylib to (path to library folder from user domain) as string
    set Receiver to "Screen Savers"
     
    tell application "Finder"
    	activate
    	if not (exists (Mylib & Receiver)) then make new folder in Mylib with properties {name:Receiver}
    	duplicate entire contents of folder Source to folder (Mylib & Receiver) with replacing
    	display dialog "Screensaver is installed now" buttons {"OK"} default button 1
    end tell
    Methode 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    set Source to ((path to me) as string) & "Contents:Container"
    set Allfiles to every file in Source as list
     
    set Mylib to (path to library folder from user domain) as string
    set Receiver to "Screen Savers"
     
    tell application "Finder"
    	activate
    	if not (exists (Mylib & Receiver)) then make new folder in Mylib with properties {name:Receiver}
    	duplicate Allfiles to folder (Mylib & Receiver) with replacing
    	display dialog "Screensaver is installed now" buttons {"OK"} default button 1
    end tell
    C'est ça qui me rend dingue avec le langage informatique, tu mets un virgule de trop tout est foutu ! Un être humain, tu rajoute une virgule il comprendra toujours

    Merci

  12. #12
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    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 : 606
    Par défaut
    Bonjour,
    Pour la femme parfaite, j'en parlerai à ma femme justement !

    Pour le code, ta méthode 2 est très proche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	set Allfiles to every file of folder Source
     
    	duplicate Allfiles to (Mylib & Receiver) with replacing
    Quant aux virgules et autres en programmation, je te confirme que les ordinateurs sont effectivement stupides. Tellement, qu'ils ne sont pas capables d'interpréter la moindre petite erreur qu'un enfant de 4 ans corrigerai de lui-même ! Il faut donc être aussi rigoureux et strict que l'ordinateur, ce qui en fait un bon exercice intellectuel
    Cordialement

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut :)
    Oui, dis-lui que sans toi y'a des gamins qui rament sur le web parce qu'il leur manque une virgule

    C'est pour cela que toute la partie code m'embête toujours un peu, je préfère la partie graphisme

    Tu peux voir le résultat sur mon site
    http://bodysoulspirit.weebly.com/ios...oulspirit.html

    Il s'agit d'un screensaver qui recrée l'écran de verrouillage d'iOS 7 sur le mac

    Merci encore à toi pour ton aide,

    Christian

  14. #14
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    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 : 606
    Par défaut
    Effectivement j'ai téléchargé le .dmg à partir de ton site.
    Graphisme très épuré, jolis icônes Présentation simple et efficace. Bravo !

    D'ailleurs je vais me pencher sur le format qtz pour en apprendre un peu plus (par curiosité car je n'ai pas ton coup de pinceau )

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Quartz composer
    Merci

    Oui quartz composer c'est le développement pour les dyslexiques Ceux qui ne savent pas écrire mais voient les formes dans l'espace

    Finalement tu relies des patchs qui sont des morceaux de code.

    D'ailleurs, tu peux créer des nouveaux patchs pour quartz composer dans Xcode. Il y a toute une communauté qui fait du bon boulot, dont un début de patch pour y intégrer Applscript. Si tu as envie de te faire un nom là-bas tu sera bien venu

    L'adresse est: http://kineme.net

    Puis je voyais que Applescript et automator ont été bien mis à jour pour Mavericks ! Pas mal de nouvelles fonctionnalité dont la fonction 'use'

    Cool qu'Apple continue de développer Applescript et Automator, j'espère néanmoins qu'il ne laisseront pas tomber Quartz composer, parce que avec les écrans rétina, il semble que le GL core graphics bazar dont je ne comprends rien ait quand même un peu de mal à rendre vu la qualité et le ombre de pixels sur ces écrans

    Bon, si jamais tu as une question Quartz composer j'espère que ce sera moi qui pourrait t'aider

    Merci

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Sur PPC
    Salut PBELL,

    je reviens vers toi avec une petite question :s

    Pour que l'installateur fonctionne sur PPC, je voyais plusieurs choses sur le web.

    1 - Faut qu'il soit encodé sur une machine de ce type ?

    2 - Ca pourrait venir des chemins ? La méthode qu"on a utilisée ne marche pas sur PPC ?

    Que vaudrait t'il mieux que je fasse ? Un second installateur ou modifier celui-ci ? Si'il s'agit juste de l'encoder sur une vieille machine je connais quelqu'un qui en a une, je pourrais aller le faire là-bas.

    Puex-tu m'orienter ? Me dire comment je dois chercher ?

    Merci

  17. #17
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    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 : 606
    Par défaut
    Bonsoir,
    Je ne pense pas que le fonctionnement ou pas soit lié au fait que le Mac soit un PPC ou un Intel.
    Par contre, il est certainement dépendant de la version du système.

    Je viens d'essayer ton application sur un vieux G5 Bi-Pro tournant sous 10.4. Le simple affichage de ton dmg fait planter le Finder.
    Tu utilises sans doute pour ta fenêtre graphique sur le Finder des fonctions qui n'existe pas encore sur le 10.4
    J'ai contourné le problème de ce plantage, mais malgré tout un message indique que "Install IOS 7 Screensaver" est sans doute endommagé.
    J'ai donc repris ton script, ré-enregistré sous forme d'application,.... mais on ne peut l'ouvrir sous forme de paquet !
    Visiblement, cette possibilité pour des scripts n'existe pas sous os 10.4.

    Il me semble que les PPC sont limités à OS 10.4 ou 10.5, donc les chances que ton application fonctionne sur ces versions sont faibles.
    Il faudrait aussi se pencher sur la version à partir de laquelle Apple a intégrer la technologie Quartz

    Bon courage

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut Bonjour
    Bonjour Philippe,

    Comme tu as la classe ! Merci !

    Ca c'est dingue que juste le .dmg fasse planter Finder.
    Et les applescripts donc tu dis qu'un ne peux simplement pas les enregistrer en .app ? Moi je pensais que c'était la méthode des chemins invoqués qui était trop récente, entre les posix et tout ça

    Quartz composer c'était à partir de 10.4 justement.

    Bref, tu sais quoi ? Je vais faire un .zip avec un alias vers le dossier screensaver Et puis les gens n'ont qu'à mettre à jour leurs machines

    Alors Quartz ? Tu as regardé ? Toujours pas une petite question laquelle je puisse peut-être répondre ? ? ?

  19. #19
    Membre émérite

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Septembre 2010
    Messages
    606
    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 : 606
    Par défaut
    Bonjour,
    Oui, j'ai regarder Quartz... j'ai même découvert que dans le paquet Xcode il y a un Quartz Composer tout prêt pour cela.
    (j'avais juste utiliser Xcode pour me remettre à jour en programmation et écrire un petit utilitaire réseau)

    Quelques visites sur le Web et j'ai appris à utiliser Quartz....de là à dire que ce que je fais est beau, il y a un grand pas !!
    Mais au moins je manipule les objets graphiques et leurs propriétés. C'est simple, intuitif (presque) et l'interface de manipulation des objets est facile.

    J'ai des objets qui tournent et bougent en x,y,z, en fonction aléatoires ou basés sur la vidéo de la webcam ou encore sur l'amplitude du son du micro intégré... c'est sympa comme screensaver !

    Merci du tuyau !

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 17
    Par défaut :)
    Nickel

    T'ai envoyé un message en MP

    Bonne journée

Discussions similaires

  1. Chemin absolu, relatif des fichiers
    Par Anium dans le forum C++
    Réponses: 10
    Dernier message: 12/06/2008, 17h54
  2. Comment récupérer le chemin en relatif d'un fichier
    Par pascalcom dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/06/2007, 08h26
  3. VBA excel Par bouton parcourir prendre chemin dossier
    Par raymoundo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/01/2007, 11h37
  4. Réponses: 2
    Dernier message: 24/05/2006, 19h29

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