Изменение тегов Finder с помощью AppleScript

#tags #applescript #finder

#Теги #applescript #поисковик

Вопрос:

Я хочу назначить определенные теги выбранным файлам в Finder (OS X 10.9.4), используя AppleScript и tag, но у меня возникают проблемы с передачей пути к файлу в tag.

 tell application "Finder"
    try
        repeat with currentFile in items of (get selection)
            if label index of currentFile is 0 then
                do shell script ("/usr/local/bin/tag -a 'foo' " amp; currentFile)
            else
                set label index of currentFile to 0
            end if
        end repeat
    on error e
        return e
    end try
end tell
  

Если я /Users/fort/bar.txt выбрал в Finder, я получаю следующую ошибку:

 "tag: The file “/Users/fort/bar.txt” couldn’t be opened because there is no such file."
  

Однако следующий код изменяет тег указанного файла на foo :

set myFile to "/Users/fort/bar.txt"
do shell script ("/usr/local/bin/tag -a 'foo' " amp; myFile)

Есть идеи, почему currentFile не передается тегу таким образом, чтобы он мог анализировать? Спасибо.

форт

Комментарии:

1. это именно та ошибка, которую вы получаете?

2. Я добавил кавычки по ошибке, и имя моего Mac HD (которое является MBA) должно добавляться к пути. И, очевидно, что имя файла выдумано. Итак, точная ошибка будет выглядеть следующим образом: tag: The file “MBA/Users/fort/bar.txt” couldn’t be opened because there is no such file.

Ответ №1:

Проблема с путем, необходимо преобразовать элемент Finder в строку и преобразовать путь HFS в путь posix

Попробуйте это

 tell application "Finder"
    repeat with currentFile in (get selection)
        tell currentFile
            if label index is 0 then
                my tagCmd(it as text) -- convert Finder item e.g. file "bar.txt" of folder "fort" of.... -->  "MBA:Users:fort:bar.txt” (path with colon)
            else
                set label index to 0
            end if
        end tell
    end repeat
end tell

on tagCmd(f)
    do shell script "/usr/local/bin/tag -a 'foo' " amp; quoted form of POSIX path of f -- posix path convert path with colon to use in shell
end tagCmd
  

Комментарии:

1. Это сработало, спасибо @jackjr300! Единственное, что не работает, это переключение тегов, но это не имеет значения, поскольку я создал другой скрипт, который удаляет все теги.

2. можете ли вы опубликовать скрипт, который удаляет все теги?