12

我正在尝试修改applescript当 Outlook 中有新消息时触发咆哮通知的。原始脚本在这里

在我的if声明中,我想说的是,如果文件夹是已删除邮件、垃圾邮件或已发送邮件,请不要触发通知。

这是声明:

if folder of theMsg is "Junk E-mail" or "Deleted Items" or "Sent Items" then
    set notify to false
else
    set notify to true
end if

看来 applescript 不喜欢我添加的多个 is/or 项目。有没有办法包含多个条件,或者我是否需要编写嵌套的 if/then?

4

4 回答 4

16

在 AppleScript 中链接条件的正确方法if是重复完整的条件:

if folder of theMsg is "A" or folder of theMsg is "B" or folder of theMsg is "C" then

– 左手参数没有隐含的重复。一种更优雅的方法是将您的左手参数与项目列表进行比较:

if folder of theMsg is in {"A", "B", "C"} then

它具有相同的效果(请注意,这依赖于文本list的隐式强制,这取决于您的tell上下文,可能会失败。在这种情况下,明确强制您的左侧,即(folder of theMsg as list))。

于 2012-05-09T19:59:58.773 回答
1

在条件语句中包含多个条件时,您必须重写整个条件语句。这有时会非常乏味,但这正是 AppleScript 的工作方式。您的表达式将变为以下内容:

if folder of theMsg is "Junk E-mail" or folder of theMsg is "Deleted Items" or folder of theMsg is "Sent Items" then
    set notify to false
else
    set notify to true
end if

不过,有一个解决方法。您可以将所有条件初始化为一个列表,并查看您的列表是否包含匹配项:

set the criteria to {"A","B","C"}
if something is in the criteria then do_something()
于 2012-05-09T20:02:33.790 回答
0

通过谷歌搜索“applescript if multiple conditions”浏览了这篇文章并且没有遇到我期望的代码片段,这就是我所做的(只是为了提供信息):

您还可以递归地扫描多个条件。以下示例是: — 查看发件人电子邮件地址是否包含(Arg 1.1)内容(Arg 2.1.1 和 2.1.2) 以立即停止脚本并“通知”=> true (Arg 3.1)。— 查看文件夹/邮箱(Arg 1.2)是否以“2012” (Arg 2.2.1) 开头,但不是文件夹 2012-AB 或 C (Arg 2.2.2),如果它不是以 2012 开头或包含在一个文件夹中3 个文件夹中的一个停止并且什么都不做 => false (Arg 3.2)。

if _mc({"\"" & theSender & " \" contains", "\"" & (name of theFolder) & "\""}, {{"\"@me.com\"", "\"Tim\""}, {"starts with \"2012\"", "is not in {\"2012-A\", \"2012-B\", \"2012-C\"}"}}, {true, false}) then
    return "NOTIFY "
else
    return "DO NOTHING "
end if

-- 通过 shell 脚本进行多条件比较

on _mc(_args, _crits, _r)
    set i to 0
    repeat with _arg in _args
        set i to i + 1
        repeat with _crit in (item i of _crits)
            if (item i of _r) as text is equal to (do shell script "osascript -e '" & (_arg & " " & _crit) & "'") then
                return (item i of _r)
            end if
        end repeat
    end repeat
    return not (item i of _r)
end _mc

https://developer.apple.com/library/mac/#documentation/AppleScript/Conceptual/AppleScriptLangGuide/conceptual/ASLR_about_handlers.html#//apple_ref/doc/uid/TP40000983-CH206-SW3

于 2013-07-11T20:59:01.123 回答
0

尝试:

repeat with theMsg in theMessages
        set theFolder to name of theMsg's folder
        if theFolder is "Junk E-mail" or theFolder is "Deleted Items" or theFolder is "Sent Items" then
            set notify to false
        else
            set notify to true
        end if
    end repeat

尽管其他两个答案正确解决了多个标准,但除非您指定否则它们将不起作用,否则name of theMsg's folder您将得到

mail folder id 203 of application "Microsoft Outlook"
于 2012-05-09T20:08:17.467 回答