我目前正在尝试使用 Applescript 过滤选择。
这有效:
tell application "Yojimbo" to set theYojimboSelection to selection
但事实并非如此:
tell application "Yojimbo" to set theYojimboSelection to selection where length of (name of selection) > 12
我究竟做错了什么?
我是否需要先选择所有内容,然后根据长度标准循环遍历每个选定的项目?
可以一步完成吗?
答案1
我不使用用心棒。但是,AppleScriptwhose
过滤器需要应用于复数对象。虽然selection
是本身就是一个对象列表,而是selection-object
一个单一实体,因此不能通过来制定whose
。 items of selection
在理论上,将是一个更适合过滤的集合,但items
只会生成一个取消引用list
,事实上,它也无法被过滤。
在使用 的其他应用中selection-objects
,该selection
属性令人烦恼地被部分取消引用,因此无法使用 进行过滤whose
。
如果可能的话,length of its name
(这是在这种过滤器中所使用的语法)就不是有效的过滤属性。
不幸的是,根据具有类似selection
对象的其他应用程序的操作方式,您需要手动遍历列表。
但是,如果效率是一个问题,那么这里有一个相当有效的方法,如使用对象selection
所示发现者,这是文件和文件夹的列表:
property Finder : application "Finder"
to filterItems from (L as list) thru filter as handler into |L*| as list : null
local L, |L*|, filter
if |L*| = null then set |L*| to {}
script filteredItems
property array : L
property fn : filter
property list : |L*|
end script
tell the filteredItems to repeat with x in its array
if fn(x) = true ¬
then set ¬
end of its list ¬
to x's contents
end repeat
return the list of filteredItems
end filterItems
on characterCount(x)
set |name| to the name of x
|name|'s length > 12
end characterCount
filterItems from (Finder's selection) thru characterCount