Applescript 如果没有';不存在

Applescript 如果没有';不存在,applescript,posix,attachment,Applescript,Posix,Attachment,我想自动将邮件中的附件保存到硬盘上。经过大量研究,我在邮件中设置了一个规则,每当收到带有附件的电子邮件时,都会运行下面的脚本 use scripting additions using terms from application "Mail" on perform mail action with messages messageList for rule aRule set destinationPath to (POSIX file "

我想自动将邮件中的附件保存到硬盘上。经过大量研究,我在邮件中设置了一个规则,每当收到带有附件的电子邮件时,都会运行下面的脚本

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
这个很好用。排除将阻止脚本在电子邮件签名等中保存徽标。 但是这个脚本确实意味着所有文件都在一个目录中(电子邮件附件)

由于脚本中有发件人的名称,所以我一直在尝试使用发件人名称在“电子邮件附件”中创建一个子目录(但仅在不存在时创建它),然后将文件保存为该目录中附件的“timestamp&name”

这样,我将有一个目录结构下的'电子邮件附件'的所有发件人姓名及其附件在自己的目录

我已经尝试了我能做的一切,但没有成功(我可以在这里发布我的最新尝试,但我宁愿保存我的脸红!!)

有人知道如何修改我的脚本使之生效吗???如果您有任何想法,谢谢您…

要测试目标文件夹是否存在,如果没有创建它,您可以使用以下示例AppleScript代码:

告诉应用程序“系统事件”
如果不存在(存在文件夹(destinationPath和senderName)),则
在别名destinationPath末尾创建新文件夹,属性为{name:senderName}
如果结束
结束语
如果文件夹不存在,另一种创建该文件夹的方法是:

do shell script "mkdir -p " & (POSIX path of destinationPath & senderName)'s quoted form
如果它不存在,这将创建它,如果它存在,它将什么也不做


另一方面,这里有一种消除
if
的方法<代码>否则,如果您有以下代码块:

将doSave设置为true
将originalName设置为附件的名称
将doNotSaveFileTypeList设置为{“jpg”、“jpeg”、“gif”、“png”、“html”}
将AppleScript的文本项分隔符设置为“”
将fileExtension设置为原始名称的最后一个文本项
将AppleScript的文本项分隔符设置为“”
如果doNotSaveFileTypeList包含文件扩展名,则
将doSave设置为false
如果结束
当所有列表项的操作都相同时,我喜欢使用这种方法,因为它更容易添加或从列表中删除,而无需修改代码块的其余部分


注意:示例AppleScript代码仅此而已,不包含任何其他适当的错误处理。用户有责任根据需要添加任何适当的错误处理。

要测试目标文件夹是否存在,如果没有创建,可以使用以下示例AppleScript代码:

告诉应用程序“系统事件”
如果不存在(存在文件夹(destinationPath和senderName)),则
在别名destinationPath末尾创建新文件夹,属性为{name:senderName}
如果结束
结束语
如果文件夹不存在,另一种创建该文件夹的方法是:

do shell script "mkdir -p " & (POSIX path of destinationPath & senderName)'s quoted form
如果它不存在,这将创建它,如果它存在,它将什么也不做


另一方面,这里有一种消除
if
的方法<代码>否则,如果您有以下代码块:

将doSave设置为true
将originalName设置为附件的名称
将doNotSaveFileTypeList设置为{“jpg”、“jpeg”、“gif”、“png”、“html”}
将AppleScript的文本项分隔符设置为“”
将fileExtension设置为原始名称的最后一个文本项
将AppleScript的文本项分隔符设置为“”
如果doNotSaveFileTypeList包含文件扩展名,则
将doSave设置为false
如果结束
当所有列表项的操作都相同时,我喜欢使用这种方法,因为它更容易添加或从列表中删除,而无需修改代码块的其余部分



注意:示例AppleScript代码仅此而已,不包含任何其他适当的错误处理。用户有责任添加任何适当的、需要的或想要的错误处理。

谢谢,这太好了-可以处理并创建文件夹。我还喜欢if/else脚本,它将使添加到更容易。你能再帮我一个忙吗。我试图编辑“如果dosave为true,则保存…”行以使用新创建的文件夹,但我无法使其工作。有什么想法吗?thanks@Jonathan休伊特,根据当前代码,这对我来说是有效的:
如果doSave为true,则将附件保存在文件中(destinationPath&senderName&“:”&attachmentName)
,也就是说,我不会在
时间戳中使用
/
,而是使用
-
。我不在自己的计算机上检查这一点,也许我记错了。我认为,如果试图在已经存在的路径上创建新文件/文件夹,SystemEvents不会抱怨。因此,即使没有
if…then
测试,也可以简单地:
告诉app“System Events”使用属性{name:destinationPath&senderName}
创建一个新文件夹(前提是
destinationPath
上的文件夹已经存在)。谢谢,这很好-可以处理并创建文件夹。我还喜欢if/else脚本,它将使添加到更容易。你能再帮我一个忙吗。我试图编辑“如果dosave为true,则保存…”行以使用新创建的文件夹,但我无法使其工作。有什么想法吗?thanks@Jonathan休伊特,根据当前代码,这对我来说是有效的:
如果doSave为true,则将附件保存在文件中(destinationPath&senderName&“:”&attachmentName)
,也就是说,我不会在
时间戳中使用
/
,而是使用
-
。我不在自己的计算机上检查这一点,也许我记错了。我认为,如果试图在已经存在的路径上创建新文件/文件夹,SystemEvents不会抱怨。因此,即使没有
if…then
测试,也可以简单地:
告诉app“System Events”创建具有属性{name:destinationPath&senderName}
(提供