我正在尝试修改在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?
答案 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