这是事情:
我在Automator中使用AppleScript来获取剪贴板值,当然它可以正常工作,但是当我想获得多个分隔值时,它总是只返回顶部的一个值。
这是一步:
on run {input, parameters}
--get the clipboard info
set Storage to get the clipboard
display dialog Storage
return input
end run
我试图手动复制一些text_1,text_2 ...(命令+ c,命令+ v),然后只运行我的AppleScript,结果是我真正想要的结果:
这是我的脚本编辑器代码:
我不得不说,由于某些限制,我只能使用Automator和AppleScript,那么有什么解决方案或建议吗? 这是"获取变量的价值"图片 Get Value of Variable
答案 0 :(得分:0)
我认为这是 Automator Copy To Clipbard
操作或AppleScript中的错误。 Automator 操作通常用Objective-C编写,它有一些AppleScript没有的数据类型。看起来 Automator 操作会将数组复制到剪贴板,这是您可以使用Objective-C执行的操作,但不适用于AppleScript。
我的感觉是AppleScript是一个有问题的实体,因为动作正在按照它的意图行事,并且在 Automator 上下文中,保留剪贴板数据不会造成问题作为数组类型。 AppleScript可能没有在剪贴板数据处理的实现中满足这一要求,并且很难将数组或列表强制转换为纯文本,正如您所说的那样 - 只包含数组的第一个元素。
do shell script
命令而不是:
set Storage to get the clipboard
尝试:
set Storage to do shell script "pbpaste"
由于 Automator 操作可能是用ObjC编写的,因此可以合理地假设使用AppleScriptObjC可以访问必要的数据类型。
用以下内容替换整个AppleScript:
use framework "Foundation"
use scripting additions
set Storage to (current application's NSPasteboard's generalPasteboard's ¬
stringForType:(current application's NSPasteboardTypeString)) ¬
as text
display alert Storage
input
变量 Automator 中的 Run AppleScript
操作会获取上一个操作的结果,并将其存储在附加到on run {input, parameters}
处理程序的变量中,即input
(您可以忽略parameters
)。
目前,您的工作流程实际上会将剪贴板的内容( Copy To Clipboard
操作的输出)直接发送到AppleScript的input
变量。
因此,您可以用以下内容替换整个AppleScript:
on run {input, parameters}
set the text item delimiters to linefeed
set Storage to the input as text
display dialog Storage
end run
这些解决方案中的任何一个都应该有效,所以只需选择您喜欢的方法即可。 数字#3 可能在您当前的设置中最有意义,并且是最简单的。