1

Я хочу получить путь к родительской папке подпапки, когда я удаляю папку в приложении, закодированном в Applescript

Поэтому, если я урону папку с именем «Test1», которая находится на рабочем столе

Я хочу, чтобы скрипт дал мне «/Users/username/Desktop/» в качестве родительского пути для «Test1». Это мой код:

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

Это броски и ошибка, говорящая, что:

"Не могу получить класс ctnr из {псевдонима" Mac HD: Пользователи: имя пользователя: Рабочий стол: Test1: "}

Есть идеи, как мне этого добиться?

2 ответа2

2

Параметр open обработчика получает список объектов- alias 1. Фигурные скобки ({}) в вашем сообщении об ошибке указывают на то, что ошибка произошла во время попытки обработки объекта списка.

Таким образом, вам нужно использовать что-то вроде set FolderPath to first item of the_dropped_folder для работы с одним элементом вместо списка (и, вероятно, присваивайте параметру имя во множественном числе, пока вы его используете, чтобы он «читался лучше»). Это должно позволить правильной работе вашего set ParentPath to container of FolderPath оператора FolderPath .

Следующее утверждение, вероятно, потерпит неудачу. ParentPath будет объектом folder Finder, у которого нет свойства POSIX path . Обычно самый простой способ обойти эту проблему - заставить Finder преобразовать свой объект item (folder является подклассом item) в объект alias а затем извлечь его POSIX path (объекты alias действительно имеют свойство POSIX path).

Если вы соберете все это вместе, у вас может получиться что-то вроде этого:

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

Без всех промежуточных переменных:

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

Или с помощью системных событий (чьи объекты- item действительно имеют свойство 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

Примечание. Ничто в моих версиях (или в вашей первоначальной формулировке) не относится к обработке папок. Эта же программа обработает удаленный файл и выдаст его контейнер.


1 Технически они являются объектами «class bmrk» в Snow Leopard, которые, похоже, работают в основном как правильные объекты alias (хотя могут быть некоторые отличия от истинных объектов alias ).

1

Вот еще один полезный пример (я только что описал вышеизложенное, чтобы проиллюстрировать то, что кажется обычной ловушкой для таких молодых игроков, как я; я не понимал, что скобки важны).

Допустим, tmpItem - это файл, сброшенный на каплю. Вы можете сказать приложение "Finder", чтобы ...

установить в качестве места назначения путь POSIX tmpItem - это будет работать

установить в качестве места назначения путь POSIX контейнера tmpItem.

установите в качестве псевдонима назначение пути POSIX контейнера tmpItem.

установить в качестве места назначения путь POSIX (контейнер tmpItem в качестве псевдонима) - это будет выполнено

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .