AppleScript:如何检查以字符串开头的 folders/files 是否存在?

AppleScript: how to check if folders/files starting with a string exist?

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

我必须首先检查“如果存在...”,否则如果给定目录中不存在以“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 对象是否存在。但是,folder in folder libraryPath whose... 查询 return 是一个 AppleScript list 的 Finder 对象,列表不是 本身 一个 Finder对象,所以命令 returns '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 关键字 return 是一个以 'A' 开头的随机文件夹(如果存在),并且 exists 命令将其识别为 Finder 对象。

不过,您并不真的需要在这里使用 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

对于大多数事情,系统事件比 Finder 更快、更可靠,如果找不到任何匹配项,它将 return 一个空集。