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 一个空集。
我正在尝试检查以“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 一个空集。