Macos 通过AppleScript从Finder中的选择中取消选择文件

Macos 通过AppleScript从Finder中的选择中取消选择文件,macos,automation,applescript,automator,finder,Macos,Automation,Applescript,Automator,Finder,我已经到处搜索了大约6个小时,以找到一种方法,通过AppleScript通过Automator快速地从Finder中先前选择的项目数组中取消选择文件项目。我看到了取消选择所有项目,我看到了将项目添加到选择/列表以进行处理,但没有从选择中删除项目 目标是:我通常需要处理大量图像,并获得主管的批准,然后才能将它们提供给我们的服务器使用。所有这些都包含一组透明PNG和一组不透明JPG。我只需要上传JPG文件就可以了。假设我有30张图片。其中15个是JPG,15个是PNG。我希望能够选择所有30张图片,

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

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

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

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

我还尝试通过Automator AppleScript通过
input
使用给定的文件。但遗憾的是,这仍然会导致了解如何从当前选择中删除/取消选择文件

有人知道如何做到这一点吗


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

虽然实际上并没有取消选择项目本身,但查找器有一个显示指定项目的
reveal
命令。一种方法是编辑所选项目的列表,然后显示结果

请注意,所选项目的排序会有所不同,这取决于它是来自自动机操作(按名称排序)还是来自Finder tell语句(所选顺序),并且来自多个文件夹的项目混合(在自动机工作流中可能发生)将导致多个查找窗口

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

工作流接收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

有两种方法可用于此,一种是在纯AppleScript中,另一种是使用自动机操作

纯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
变量传入这些文件,您可以使用该变量,而不是再次测试选择,但原则仍然成立

或者,您可以使用“筛选器查找器项目”操作设置工作流,如下所示:

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工作流的项目?你在服务/快速行动中使用了什么?@red_nerge或。无论它是发生在实际的查找器选择中,还是发生在传递给工作流的文件中。我目前只有一个运行AppleScript的块。我对其他可能的选择持开放态度。(JavaScript、shell等)@user3439894好吧,这太糟糕了。但是我对其他选择持开放态度。如果可以通过Javascript、shell等实现,那么我将100%愿意输入/尝试它们。@user3439894,这没关系!谢谢你的意愿!我推荐纯AppleScript方法+不管怎样。