Хотите создать каталог с AppleScript, если он еще не существует - PullRequest
1 голос
/ 13 июля 2020

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

use scripting additions

using terms from application "Mail"
    on perform mail action with messages messageList for rule aRule
        set destinationPath to (POSIX file "/volumes/Data/Dropbox/WORK ITEMS/Email Attachments/") as string
        tell application "Mail"
            repeat with aMessage in messageList
                repeat with anAttachment in mail attachments of aMessage
                    set senderName to (extract name from sender of aMessage)
                    set {year:y, month:m, day:d, hours:h, minutes:min} to date received of aMessage
                    set timeStamp to (d & "/" & (m as integer) & "/" & y) as string
                    set attachmentName to senderName & " - " & timeStamp & " - " & name of anAttachment
                    
                    set doSave to true
                    set originalName to name of anAttachment
                    if originalName contains "jpg" then
                        set doSave to false
                    else if originalName contains "jpeg" then
                        set doSave to false
                    else if originalName contains "gif" then
                        set doSave to false
                    else if originalName contains "png" then
                        set doSave to false
                    else if originalName contains "html" then
                        set doSave to false
                    end if
                    
                    if doSave is true then save anAttachment in file (destinationPath & attachmentName)
                    
                end repeat
            end repeat
        end tell
        
    end perform mail action with messages
end using terms from

Это отлично работает. Исключения не позволяют сценарию сохранять логотипы в подписях электронной почты и т. Д. c. Но этот сценарий действительно означает, что все файлы находятся в одном каталоге (вложения электронной почты).

Поскольку в сценарии указано имя отправителя, я пытался создать подкаталог в «Вложениях электронной почты», используя имя отправителя (создавая его только в том случае, если он не существует), а затем сохраните файл как «отметка времени и имя» вложения в этом каталоге.

Таким образом, у меня будет структура каталогов в разделе «Вложения электронной почты» 'всех отправителей с их вложениями в их собственном каталоге.

Я перепробовал все, что мог - и не преуспел (я могу опубликовать свою последнюю попытку здесь, но лучше бы сохранить свои румянец !!)

Кто-нибудь знает, как поправить мой скрипт, чтобы это заработало ??? Спасибо, если у вас есть идеи ...

1 Ответ

0 голосов
/ 13 июля 2020

Чтобы проверить, существует ли целевая папка , и если не создать ее, вы можете использовать следующий пример AppleScript код :

tell application "System Events"
    if not (exists folder (destinationPath & senderName)) then
        make new folder at end of alias destinationPath with properties {name:senderName}
    end if
end tell

Другой способ создать папку , если она не существует:

do shell script "mkdir -p " & (POSIX path of destinationPath & senderName)'s quoted form

Это создаст ее, если она не существует, и если делает, то ничего не делает.

Кстати, вот способ устранить блок if ... else if из кода у вас есть:

set doSave to true
set originalName to name of anAttachment
set doNotSaveFileTypeList to {"jpg", "jpeg", "gif", "png", "html"}
set AppleScript's text item delimiters to "."
set fileExtension to last text item of originalName
set AppleScript's text item delimiters to ""
if the doNotSaveFileTypeList contains fileExtension then
    set doSave to false
end if

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

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

...