在 AppleScript 脚本中识别文件路径作为 Automator 工作流程的一部分
Identify path to file in AppleScript script as part of Automator workflow
我仍然处于 Automotor 和 AppleScript 学习曲线的底部,所以我很抱歉缺乏基本的理解,这不可避免地导致了这个问题。
我在 MacBook Air 上 运行 MacOSX 10.15.6 (Catalina)。我的最终目标是获取 .pages 文件(或其他兼容文件类型)的文件夹,并通过使用 Pages 打开然后导出到与新文件类型相同的文件夹来批量转换为 .pdf(或其他)。我已经设置了一个 Automator 脚本,其中包含:
一世。获取指定的 Finder 项目 - 定义包含文件的文件夹
二.获取文件夹内容 - 列出文件夹中的所有文档
三. AppleScript 打开每个文档并导出为 PDF
甚至在到达 'export' 位之前(我已经在下面的位中注释掉了导出命令),当我尝试获取包含该文件的目录的路径时,AppleScript 会抛出错误. AppleScript 看起来像:
on run {input, parameters}
repeat with theFile in input
tell application "Pages"
set theDoc to open theFile
set theDocName to name of theDoc
set theName to (characters 1 thru -7 of theDocName) as text
set thePDFPath to ((path to theFile as text) & theName & ".pdf") as text
-- export theDoc to thePDFPath as PDF
close theDoc
end tell
end repeat
end run
我得到的错误是:
The action “Run AppleScript” encountered an error: “Pages got an
error: Can’t make alias "path:to:directory:test.pages" into type
constant.”
我已经为此苦苦挣扎了一段时间,到目前为止,我在网上找到的 none 的建议已经帮助解决了这个问题。非常感谢任何帮助。
path to
仅 returns 应用程序或脚本的路径,或文件系统中某些位置的路径,例如 home folder
或 documents folder
。不过,您不需要使用任何东西来获取路径,因为 theFile
已经是对输入中某个项目的引用 - 您可以将其强制转换为文本。此外,一旦您构建了文件路径,Pages 就需要一个用于导出的文件说明符。
请注意,文件路径包含扩展名,因此需要进行一些操作以将其与名称的其余部分分开 - 此处我添加了一个处理程序以将文件路径拆分为包含文件夹、名称、和扩展名,以便可以根据需要对它们进行处理:
on run {input, parameters}
repeat with theFile in input
set {folderPath, fileName, extension} to getNamePieces from theFile
tell application "Pages"
set theDoc to open theFile
set theDocName to name of theDoc
set theName to (characters 1 thru -7 of theDocName)
set thePDFPath to (folderPath & fileName & theName & ".pdf")
export theDoc to file thePDFPath as PDF
close theDoc
end tell
end repeat
end run
to getNamePieces from someItem
tell application "System Events" to tell disk item (someItem as text)
set theContainer to the path of container
set {theName, theExtension} to {name, name extension}
end tell
if theExtension is not "" then
set theName to text 1 thru -((count theExtension) + 2) of theName
set theExtension to "." & theExtension
end if
return {theContainer, theName, theExtension}
end getNamePieces
我仍然处于 Automotor 和 AppleScript 学习曲线的底部,所以我很抱歉缺乏基本的理解,这不可避免地导致了这个问题。
我在 MacBook Air 上 运行 MacOSX 10.15.6 (Catalina)。我的最终目标是获取 .pages 文件(或其他兼容文件类型)的文件夹,并通过使用 Pages 打开然后导出到与新文件类型相同的文件夹来批量转换为 .pdf(或其他)。我已经设置了一个 Automator 脚本,其中包含: 一世。获取指定的 Finder 项目 - 定义包含文件的文件夹 二.获取文件夹内容 - 列出文件夹中的所有文档 三. AppleScript 打开每个文档并导出为 PDF
甚至在到达 'export' 位之前(我已经在下面的位中注释掉了导出命令),当我尝试获取包含该文件的目录的路径时,AppleScript 会抛出错误. AppleScript 看起来像:
on run {input, parameters}
repeat with theFile in input
tell application "Pages"
set theDoc to open theFile
set theDocName to name of theDoc
set theName to (characters 1 thru -7 of theDocName) as text
set thePDFPath to ((path to theFile as text) & theName & ".pdf") as text
-- export theDoc to thePDFPath as PDF
close theDoc
end tell
end repeat
end run
我得到的错误是:
The action “Run AppleScript” encountered an error: “Pages got an error: Can’t make alias "path:to:directory:test.pages" into type constant.”
我已经为此苦苦挣扎了一段时间,到目前为止,我在网上找到的 none 的建议已经帮助解决了这个问题。非常感谢任何帮助。
path to
仅 returns 应用程序或脚本的路径,或文件系统中某些位置的路径,例如 home folder
或 documents folder
。不过,您不需要使用任何东西来获取路径,因为 theFile
已经是对输入中某个项目的引用 - 您可以将其强制转换为文本。此外,一旦您构建了文件路径,Pages 就需要一个用于导出的文件说明符。
请注意,文件路径包含扩展名,因此需要进行一些操作以将其与名称的其余部分分开 - 此处我添加了一个处理程序以将文件路径拆分为包含文件夹、名称、和扩展名,以便可以根据需要对它们进行处理:
on run {input, parameters}
repeat with theFile in input
set {folderPath, fileName, extension} to getNamePieces from theFile
tell application "Pages"
set theDoc to open theFile
set theDocName to name of theDoc
set theName to (characters 1 thru -7 of theDocName)
set thePDFPath to (folderPath & fileName & theName & ".pdf")
export theDoc to file thePDFPath as PDF
close theDoc
end tell
end repeat
end run
to getNamePieces from someItem
tell application "System Events" to tell disk item (someItem as text)
set theContainer to the path of container
set {theName, theExtension} to {name, name extension}
end tell
if theExtension is not "" then
set theName to text 1 thru -((count theExtension) + 2) of theName
set theExtension to "." & theExtension
end if
return {theContainer, theName, theExtension}
end getNamePieces