Obtenir le chemin d'accès du parent du dossier secondaire: Applescript

Je souhaite obtenir le chemin d'accès du dossier parent d'un dossier secondaire lorsque je dépose un dossier sur une application codée dans Applescript

Donc, si je dépose un dossier appelé 'Test1' qui se trouve sur le Bureau

Je veux que le script me donne '/ Users / username / Desktop /' comme chemin parent de 'Test1'. C'est mon code:

on open the_dropped_folder tell application "Finder" set FolderPath to the_dropped_folder set ParentPath to container of FolderPath set thepath to POSIX path of ParentPath end tell end open 

Cela lance et l'erreur en disant que:

"Je ne peux pas avoir la classe ctnr de {alias" Mac HD: Utilisateurs: nom d'utilisateur: Desktop: Test1: "}

Une idée de comment je peux y parvenir?

Le paramètre open handler obtient une liste d'objets alias 1 . Les accolades ( {} ) dans votre message d'erreur indiquent que l'erreur s'est produite alors qu'il essayait de fonctionner sur un objet de liste.

Ainsi, vous devez utiliser quelque chose comme set FolderPath to first item of the_dropped_folder pour fonctionner avec un seul élément au lieu de la liste (et probablement donner au paramètre un nom pluriel alors que vous l'êtes, afin qu'il «se lise mieux»). Cela devrait permettre à votre set ParentPath to container of FolderPath instruction set ParentPath to container of FolderPath fonctionner correctement.

La prochaine déclaration va probablement échouer. ParentPath sera un objet de folder Finder qui n'a pas de propriété de POSIX path . Habituellement, le moyen le plus simple est de faire en sorte que Finder convertisse son item objet (le folder est une sous-classe d' item ) dans un objet alias puis extrayez son POSIX path (les objets alias possèdent une propriété POSIX path ).

Si vous mettez tout cela ensemble, vous pourriez vous retrouver avec quelque chose comme ceci:

 on open someDroppedAliases set theAlias to first item of someDroppedAliases tell application "Finder" set parentFolder to container of theAlias set parentFolderAlias to parentFolder as alias end tell set parentFolderPath to POSIX path of parentFolderAlias display dialog "Path of container:" default answer parentFolderPath end open 

Sans toutes les variables intermédiaires:

 on open someDroppedAliases tell application "Finder" to ¬ set parentFolderPath to POSIX path of ¬ (container of first item of someDroppedAliases as alias) display dialog "Path of container:" default answer parentFolderPath end open 

Ou, avec les événements système (dont item objets d' item possèdent réellement une propriété de POSIX path ):

 on open someDroppedAliases tell application "System Events" to ¬ set parentFolderPath to POSIX path of ¬ container of first item of someDroppedAliases display dialog "Path of container:" default answer parentFolderPath end open 

Remarque: Rien dans mes versions (ou dans votre formulation originale) n'est spécifique aux dossiers de traitement. Le même programme traitera un fichier déposé et produira son conteneur.


1 Techniquement, ils sont «class bmrk» objets «class bmrk» dans Snow Leopard, qui semblent fonctionner principalement comme des objets d' alias appropriés (bien qu'il puisse y avoir des différences par rapport aux objets d' alias ).

Voici un autre exemple utile (je viens d'aboutir ci-dessus pour illustrer ce qui semble être un piège commun pour les jeunes joueurs comme moi, je ne me suis pas rendu compte que les parenthèses sont importantes).

Disons que tmpItem est un fichier déposé sur une gouttelette. Vous pouvez indiquer l'application "Finder" à …

Définissez la destination sur le chemin POSIX de tmpItem – Cela fonctionnera

Définissez la destination sur le chemin POSIX du conteneur de tmpItem – Cela FALINE

Définissez la destination sur le chemin POSIX du conteneur de tmpItem comme alias – Cela FALINE

Définissez la destination sur le chemin POSIX de (le conteneur de tmpItem comme alias) – Cela SUCCÈS