我可以看到您已经在这方面获得了帮助,但我想提供另一种替代解决方案,它不使用外部框架或第三方工具(当然,并不是说使用这些有什么问题)。
我还想评论一下使用监视文件夹作为您创建更多子文件夹的根目录的问题,我将在展示我的脚本后进行:
property alphabet : "ABCDEFGHIJKLMNOPQRSTUVWXYZ:abcdefghijklmnopqrstuvwxyz"
on adding folder items to thisfolder after receiving added_items
tell application "Finder" to ¬
repeat with this_item in the added_items
get this_item's name
get the first character of the result
my capitalise(the result)
set DestinationFolderName to the result
if not (exists folder DestinationFolderName in folder thisfolder) then ¬
make new folder in folder thisfolder with properties ¬
{name:DestinationFolderName}
move this_item to folder DestinationFolderName of folder thisfolder
end repeat
end adding folder items to
to capitalise(l as text)
local l
considering case
set x to (the offset of l in the alphabet) mod 27
end considering
return character x of the alphabet
end capitalise
您会注意到该脚本包含一个我编写的子例程(处理程序),名为capitalise()。这需要一个字母并以大写形式返回它,基本上只使用一行代码。
检索添加的项目的名称,其首字母大写。如果使用该字母命名的子文件夹尚不存在,则创建一个,然后将添加的项目移入其中。
它与您的脚本基本相同,只是增加了使用文件名的第一个字母即时创建文件夹的功能。
关于无限回归...
关于在监视文件夹中创建子文件夹导致无限循环的恐惧,@vadian 强调这个问题是绝对正确的,因为它可能会以他描述的方式表现出来。在编写涉及更改被监视文件夹的脚本时需要注意这一点,通常最简单的做法是避免这样做。
但是,在某些情况下,您可能想要或需要将文件存储在被监视的文件夹中。如果您从未被允许这样做,那么被监视的文件夹就不会真正发挥其作为文件夹的作用;它只是充当 droplet(您将文件和文件夹拖放到其上以对其执行一些操作的脚本)。
因此,虽然您绝对应该小心以这种方式使用受监视的文件夹,但您可以通过适当的保护措施来非常合理地这样做,以防止无限倒退。举个简单的例子,假设您的脚本只需要对文件和不 文件夹进行排序;简单的解决方案是让脚本忽略它收到的任何文件夹。
但实际上,我们甚至不需要在这里这样做:我们可以让它平等地处理文件和文件夹,不会发生任何不愉快的事情。
这是创建子文件夹然后将项目移入其中的脚本部分:
if not (exists folder DestinationFolderName in folder thisfolder) then ¬
make new folder in folder thisfolder with properties ¬
{name:DestinationFolderName}
move this_item to folder DestinationFolderName of folder thisfolder
注意子文件夹总是创建在同一个地方:thisfolder,也就是被监视的文件夹;它不是试图创建嵌套文件夹。也不是这样,如果已经存在一个使用正在处理的字母命名的文件夹,那么它不会尝试创建另一个。最后一个潜在的担忧可能来自尝试将move 子文件夹放入其自身。嗯,这不能在 Finder 中完成。这是不可能。所以,脚本会默默地抛出错误,然后终止,这正是我们想要的。
总结
我并不是在强迫您选择一种方法而不是另一种方法,也不是无视熟练程序员(例如 @vadian)的重要建议。
但是,您可以使用您的监视文件夹将已排序的文件非常安全地存储在其子文件夹中,提供您注意如何编写这些内容。