如何通过AppleScript从剪贴板复制所有信息

时间:2018-06-17 05:18:01

标签: macos shell applescript automator

这是事情:
 我在Automator中使用AppleScript来获取剪贴板值,当然它可以正常工作,但是当我想获得多个分隔值时,它总是只返回顶部的一个值。
 这是一步:

  1. 在Automator中,导入多个"获取变量值"行动,和 在这些操作中,我将设置多个值,所有这些值 是电子邮件格式
  2. 导入名为“Ask For Confirmation”的操作,不执行此操作, 我无法将多个值传递给下一个操作“从列表中选择”(我 不知道为什么,但它确实有效)
  3. 导入名为“从列表中选择”的操作以允许用户选择 我在此Automator应用程序中预先设置的电子邮件值
  4. 导入另一个名为“设置变量值”的动作来获取 用户选择的值
  5. 导入名为“复制到剪贴板”的操作以将这些值复制到 剪贴板
  6. 导入名为“运行AppleScript”的操作,这是我的代码:
  7. on run {input, parameters}
        --get the clipboard info
        set Storage to get the clipboard
        display dialog Storage
        return input
    end run
    

    Here is the whole actions picture

    我试图手动复制一些text_1,text_2 ...(命令+ c,命令+ v),然后只运行我的AppleScript,结果是我真正想要的结果: AppleScript Result

    这是我的脚本编辑器代码: Here is my Script Editor code:

    我不得不说,由于某些限制,我只能使用Automator和AppleScript,那么有什么解决方案或建议吗? 这是"获取变量的价值"图片 Get Value of Variable

1 个答案:

答案 0 :(得分:0)

可能的解释:

我认为这是 Automator Copy To Clipbard 操作或AppleScript中的错误。 Automator 操作通常用Objective-C编写,它有一些AppleScript没有的数据类型。看起来 Automator 操作会将数组复制到剪贴板,这是您可以使用Objective-C执行的操作,但不适用于AppleScript。

我的感觉是AppleScript是一个有问题的实体,因为动作正在按照它的意图行事,并且在 Automator 上下文中,保留剪贴板数据不会造成问题作为数组类型。 AppleScript可能没有在剪贴板数据处理的实现中满足这一要求,并且很难将数组或列表强制转换为纯文本,正如您所说的那样 - 只包含数组的第一个元素。

解决方案:

1。使用do shell script命令

而不是:

set Storage to get the clipboard

尝试:

set Storage to do shell script "pbpaste"

2。使用AppleScriptObjC

由于 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

3。通过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 可能在您当前的设置中最有意义,并且是最简单的。