AppleScript:如何检查以字符串开头的文件夹/文件是否存在?

AppleScript:如何检查以字符串开头的文件夹/文件是否存在?,applescript,Applescript,我试图检查以“a”开头的文件夹中是否存在任何目录,然后将所有这些文件夹列在一个变量中 首先,我必须进行“if exists…”检查,否则,如果给定目录中不存在以“A”开头的文件夹,则在设置变量时会出错 以下是我的AppleScript代码: property libraryPath : (path to library folder from user domain) as string tell application "Finder" if exists (fo

我试图检查以“a”开头的文件夹中是否存在任何目录,然后将所有这些文件夹列在一个变量中

首先,我必须进行“if exists…”检查,否则,如果给定目录中不存在以“A”开头的文件夹,则在设置变量时会出错

以下是我的AppleScript代码:

property libraryPath : (path to library folder from user domain) as string

tell application "Finder"
    if exists (folder in folder libraryPath whose name begins with "A") then
        set folderlist to name of every folder in folder libraryPath whose name begins with "A"
    else
        set folderlist to {}
    end if
    
    get name of every folder in folder libraryPath whose name begins with "A"
end tell
结果是:

tell application "Finder"
    exists folder of folder "Mojave EXT:Users:devtest:Library:" whose name starts with "A"
        --> false

    get name of every folder of folder "Mojave EXT:Users:devtest:Library:" whose name starts with "A"
        --> {"Accounts", "Application Scripts", "Application Support", "Assistant", "Assistants", "Audio", "Autosave Information"}
end tell
正如您所看到的,奇怪的是,我得到了
false
作为检查以“A”开头的文件夹是否存在的结果,但是我可以再次获得它之后的所有现有文件夹

为什么??我做错了什么


提前谢谢你

exists命令告诉您是否存在某个特定的Finder对象。但是,文件夹库路径中的
文件夹,其…
查询返回查找器对象的AppleScript列表,并且列表本身不是查找器对象,因此命令返回“false”

您可以通过添加
some
关键字来修复它,如下所示:

property libraryPath : (path to library folder from user domain) as string

tell application "Finder"
    if exists (some folder in folder libraryPath whose name begins with "A") then
        set folderlist to name of every folder in folder libraryPath whose name begins with "A"
    else
        set folderlist to {}
    end if
    
    get name of every folder in folder libraryPath whose name begins with "A"
end tell
some
关键字返回一个以“a”(如果存在)开头的随机文件夹,
exists
命令将其识别为查找器对象

但是,您实际上不需要在此处使用
exists
。您只需使用:

property libraryPath : (path to library folder from user domain) as string

tell application "System Events"
    set folderlist to name of every folder in folder libraryPath whose name begins with "A"
end tell

在大多数情况下,系统事件比查找器更快、更可靠,如果找不到任何匹配的项,它将返回一个空集。

exists命令告诉您是否存在某个特定的查找器对象。但是,文件夹库路径中的
文件夹,其…
查询返回查找器对象的AppleScript列表,并且列表本身不是查找器对象,因此命令返回“false”

您可以通过添加
some
关键字来修复它,如下所示:

property libraryPath : (path to library folder from user domain) as string

tell application "Finder"
    if exists (some folder in folder libraryPath whose name begins with "A") then
        set folderlist to name of every folder in folder libraryPath whose name begins with "A"
    else
        set folderlist to {}
    end if
    
    get name of every folder in folder libraryPath whose name begins with "A"
end tell
some
关键字返回一个以“a”(如果存在)开头的随机文件夹,
exists
命令将其识别为查找器对象

但是,您实际上不需要在此处使用
exists
。您只需使用:

property libraryPath : (path to library folder from user domain) as string

tell application "System Events"
    set folderlist to name of every folder in folder libraryPath whose name begins with "A"
end tell

在大多数情况下,System Events比Finder更快、更可靠,如果找不到任何匹配的项目,它将返回一个空集。

Minor quibble:“folder of folder…”为我生成一个错误1728folders of folder…'生成一个列表(虽然速度很慢-4秒,而您的解决方案是25秒)。就我所知,这就是“false”的原因。问:当你可以使用本机别名时,为什么要使用libraryPath文本/字符串,这样可以更快地执行(.02秒vs.25)?@Mockman:没有原因,只是我没有考虑就复制了原始代码。但是如果我删除了“as string”,那么我会得到这个:错误“系统事件发生错误:无法将别名\”Mojave EXT:Users:devtest:Library:\“转换为整型。”别名“Mojave EXT:Users:devtest:Library:”中的数字-1700最终,我得出以下结论:将folderlist设置为库文件夹中名称以“A”开头的每个文件夹的名称“小诡辩:‘文件夹的文件夹…’为我生成一个错误1728。”folders of folder…'生成一个列表(虽然速度很慢-4秒,而您的解决方案是25秒)。就我所知,这就是“false”的原因。问:当你可以使用本机别名时,为什么要使用libraryPath文本/字符串,这样可以更快地执行(.02秒vs.25)?@Mockman:没有原因,只是我没有考虑就复制了原始代码。但是如果我删除了“as string”,那么我会得到这个:错误“系统事件发生错误:无法将别名\“Mojave EXT:Users:devtest:Library:\”转换为整型。别名“Mojave EXT:Users:devtest:Library:”中的数字-1700最终,我得出以下结论:将folderlist设置为库文件夹中名称以“A”开头的每个文件夹的名称”