【问题标题】:Deselecting a file from a selection in Finder via AppleScript通过 AppleScript 从 Finder 中的选择中取消选择文件
【发布时间】:2020-05-08 21:57:21
【问题描述】:

我已经到处搜索了大约 6 个小时,以找到一种方法,通过 AppleScript 通过 Automator 和快速操作从 Finder 中先前选择的项目数组中取消选择文件项目。我已经看到取消选择所有项目,我已经看到将项目添加到选择/列表以进行处理,但没有从选择中删除项目...

目标:我通常必须处理大量图像并获得主管的批准,然后才能将它们提供给我们的服务器以供使用。所有这些都包含一组透明的 PNG 和一个不透明的 JPG。我只需要上传 JPG 文件以供批准。所以,假设我有 30 张图片。其中 15 个是 JPG,其中 15 个是 PNG。我希望能够选择所有 30 张图片,并取消选择其中 15 张是 PNG(通过脚本),留下所有 JPG 的选择。

还有其他方法可以实现这一点,但如果我可以选择图像,运行脚本,然后将它们移动到上传(网站上传),那将非常有帮助。这似乎是实现最终结果的最快(手动)方式。

我所知道的:selection 属性。通过我的研究,我看到selection 属性以少量不同的方式调用,但不确定如何正确操作它。我尝试将选择转换为字符串并通过检测要从中拆分的单词(例如“Macintosh HD”)将其拆分,从而允许在列表中对其进行操作,然后可能将它们从选择中删除...?我也很不确定如何按原样正确操作属性......

我还尝试通过 Automator AppleScript 仅使用通过 input 提供的文件。但是,这仍然导致知道如何从当前选择中删除/取消选择文件。

有人知道如何实现吗?

感谢您提前花费的所有时间和信息。谢谢。

【问题讨论】:

  • 您是在谈论实际的 Finder 选择,还是已传递给 Automator 工作流程的项目?您在服务/快速操作中使用什么?
  • @red_menace 非此即彼。无论是实际的 Finder 选择还是传递给工作流的文件。我目前只有一个用于运行 AppleScript 的块。我对其他潜在选择持开放态度。 (JavaScript、shell 等)
  • @user3439894 好吧,这太糟糕了。但!我对其他选择持开放态度。如果可以通过 Javascript、shell 等实现,那么我将 100% 愿意输入/尝试这些。
  • @user3439894 没关系!感谢您的愿意!

标签: macos automation applescript automator finder


【解决方案1】:

您可以使用两种方法,一种是纯 AppleScript,另一种是使用 Automator 操作。

纯 AppleScript 解决方案是将所选内容作为文件列表,将 JPG 文件复制到另一个列表,然后将所选内容设置为该新列表,如下所示:

set new_selection_list to {}
tell application "Finder"
    set selection_list to selection
    repeat with this_item in selection_list
        if name extension of this_item is "jpg" then
            copy this_item to end of new_selection_list
        end if
    end repeat
    set selection to new_selection_list
end tell

当然,如果您通过 automator 中的 input 变量传递这些文件,您会使用它而不是再次测试选择,但原则仍然有效。

或者,您可以使用 Filter Finder Items 操作设置您的工作流程,如下所示:

我推荐第二种方法。它可能会明显更快,并且需要更少的编程。

【讨论】:

  • 我推荐纯 AppleScript 方法。 +1 无论哪种方式。
【解决方案2】:

虽然本身并没有真正取消选择项目,但 Finder 有一个 reveal 命令可以显示指定的项目。一种方法是编辑所选项目的列表,然后显示结果。

请注意,所选项目的排序取决于它是来自 Automator 操作(按名称排序)还是 Finder tell 语句(所选顺序),以及来自多个文件夹的项目(如 Automator 工作流程中可能发生的情况) ),将导致多个 Finder 窗口。

以下 Automator 快速操作示例将从输入项中删除前两项,并在 Finder 窗口中显示其余项:

Workflow 接收 Finder.app 中的当前文件或文件夹

运行 AppleScript:

   on run {input, parameters}
       set newSelection to input
       if (count input) > 2 then -- guard for following statement(s)
           set newSelection to items 3 thru -1 of input -- or whatever keep/remove criteria
       end if
       tell application "Finder" to reveal newSelection
       return newSelection
   end run

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 2018-04-29
    • 2018-09-19
    • 2019-02-03
    • 2015-10-17
    • 2016-07-04
    • 1970-01-01
    • 2017-01-05
    相关资源
    最近更新 更多