Как правильно получить путь для нескольких файлов через AppleScript или через терминал

2

Текущий скрипт, который я использую для получения пути к файлу для одиночного выбора в поиске:

tell application "Finder"
    set thepath to selection as text
    set pospath to quoted form of the POSIX path of thepath
end tell

Это дает мне путь, как это: '/Users/lawsome/Desktop/jan-study/untitled folder/'

Этот формат пути работает для передачи одного пути к файлу для дальнейших действий, таких как перемещение или удаление выбранного файла.

Когда я пытаюсь один и тот же скрипт для нескольких выборов в поисковике, я получаю такой результат:

'/Users/lawsome/Desktop/Business Org Feedback.pdfMacintosh HD/Users/lawsome/Desktop/Top 10Macintosh HD/Users/lawsome/Desktop/Follow_Up_letters_Samples.pdfMacintosh HD/Users/lawsome/Desktop/Learn Outlook Tips.txtMacintosh HD/Users/lawsome/Desktop/OutlookTips.pdf'

Этот результат не работает для меня. Я пытаюсь достичь нескольких путей для выбранных элементов поиска для дальнейших действий.

Если я перетаскиваю несколько файлов в терминале, он показывает путь к файлу в другом формате, и это работает для дальнейших действий. Как я могу получить путь правильно через скрипт или через терминальную команду.

lawsome
источник

Ответы:

3

selectionВ Finder возвращает список , так вот пример того , как я обрабатывать вещи:

Пример кода AppleScript :

tell application "Finder"
    set theSelection to selection
    if theSelection is {} then
        return
    else if (theSelection count) is equal to 1 then
        set thePathFilename to the quoted form of POSIX path of (theSelection as string)
    else
        set thePathFilename to {}
        repeat with i from 1 to (theSelection count)
            copy (quoted form of POSIX path of (item i of theSelection as string)) & space to end of thePathFilename
        end repeat
        set thePathFilename to thePathFilename as string
    end if
end tell
  • Если нет, selectionкогда скрипт запускается, он останавливает обработку.

  • Если в элементе присутствует только один элементselection , он thePathFilenameсодержит в качестве строки имя в кавычках POSIX Path File для выбранного элемента.

  • Если в элементе находится более одного элементаselection , он thePathFilenameсодержит цитируемое имя файла пути POSIX каждого из выбранных элементов в виде строки с пробелом после каждого.


Примечание . Пример кода AppleScript - это всего лишь пример , не использующий обработку ошибок и предназначенный только для демонстрации одного из многих способов выполнения задачи. Пользователь всегда должен добавлять / использовать соответствующую обработку ошибок, когда это необходимо / желательно.

user3439894
источник
Ваш код сработал. И ты объяснил очень хорошо. Я пытаюсь переместить эти выбранные файлы в корзину или другую папку. Добавлен в ваш код set destpath to "~/.trash" do shell script "mv " & thePathFilename & " " & destpath. Это сработало.
законный
Можете ли вы добавить пример, как бы вы переместили файлы с помощью команды повтора?
законное время
@ lawsome, Если вы хотите переместить выбранные элементы в корзину, вы можете просто использовать:, tell application "Finder" to move selection to trashникакой другой код не требуется, без обработки ошибок в зависимости от ситуации. То же самое относится и к перемещению файлов, selectionне обязательно разбивать их на repeatциклы, например, set thisLocation to POSIX file "/path/to/folder/" as aliasи затем tell application "Finder" to move selection to thisLocation -- with replacing, раскомментируя (удаляя --), если вы хотите перезаписать существующие элементы. Опять же, без обработки ошибок при необходимости.
user3439894
@lawsome, Тем не менее, поскольку мой ответ уже обеспечил решение, в ваших словах «передать несколько путей для выбранных элементов поиска для дальнейших действий» и «Как я могу получить путь через скрипт», если вам нужна помощь с запрос сделан в вашем втором комментарии к моему ответу, тогда вы должны опубликовать еще один вопрос, так как разрешен только один вопрос на вопрос.
user3439894
Хорошо, сэр, получил ваши очки, опубликует еще один вопрос после застревания! Я знаю, это звучит неоднозначно и неубедительно, но я всегда хотел сказать это ... что такие люди, как вы, на форуме stackexchange великолепны !!
законный