AppleScript中If语句的多个条件

时间:2012-05-09 18:49:43

标签: applescript

我正在尝试修改在Outlook中有新邮件时触发咆哮通知的applescript。原始脚本为here

在我的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

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

4 个答案:

答案 0 :(得分:14)

在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

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

答案 1 :(得分: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()

答案 2 :(得分: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"

答案 3 :(得分:0)

通过谷歌搜索“Applecript如果有多个条件”并且没有出现在我希望的代码片段中,我已经完成了这个帖子(仅用于提供信息):

您还可以递归扫描多个条件。以下示例是: - 查看发件人电子邮件地址是否包含(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