Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何通过AppleScript从剪贴板复制所有信息_Macos_Shell_Applescript_Automator - Fatal编程技术网

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

Macos 如何通过AppleScript从剪贴板复制所有信息,macos,shell,applescript,automator,Macos,Shell,Applescript,Automator,事情是这样的: 我在Automator中使用AppleScript来获取剪贴板值,当然它是有效的,但是当我想要获取多个分隔值时,它总是只在顶部返回一个值。 以下是步骤: 在Automator中,导入多个“获取变量值”操作,然后 在这些操作中,我将设置多个值,所有这些值 是电子邮件格式吗 导入名为“请求确认”的操作,而不导入此操作, 我无法将多个值传递给下一个操作“从列表中选择”(I 不知道为什么,但它有效) 导入名为“从列表中选择”的操作以允许用户选择 我在此Automator应用程序中预先设置

事情是这样的:
我在Automator中使用AppleScript来获取剪贴板值,当然它是有效的,但是当我想要获取多个分隔值时,它总是只在顶部返回一个值。
以下是步骤:

  • 在Automator中,导入多个“获取变量值”操作,然后 在这些操作中,我将设置多个值,所有这些值 是电子邮件格式吗
  • 导入名为“请求确认”的操作,而不导入此操作, 我无法将多个值传递给下一个操作“从列表中选择”(I 不知道为什么,但它有效)
  • 导入名为“从列表中选择”的操作以允许用户选择 我在此Automator应用程序中预先设置的电子邮件值
  • 导入另一个名为“设置变量值”的操作以获取 用户选择的值
  • 导入名为“复制到剪贴板”的操作以将这些值复制到 剪贴板
  • 导入名为“运行AppleScript”的操作,下面是我的代码:
  • 我试着复制一些文本1,文本2。。。手动(command+c、command+v),然后仅运行我的AppleScript,结果就是我真正想要的结果,如下所示:

    以下是我的脚本编辑器代码:

    我不得不说,由于一些限制,我只能使用Automator和AppleScript,所以有什么解决方案或建议吗? 下面是“获取变量值”的图片

    可能的解释: 我相信这是Automator
    复制到Clipbard
    操作或AppleScript中的一个错误。自动机操作通常是用Objective-C编写的,它有一些AppleScript没有的数据类型。这看起来像是自动机操作将数组复制到剪贴板,这可以通过Objective-C实现,但不能通过AppleScript实现

    我的感觉是AppleScript是这里的错误实体,因为该操作正在执行它的本意,并且在Automator上下文中,将剪贴板的数据保持为数组类型不会造成问题。AppleScript在实现剪贴板数据处理时可能没有满足这一要求,并且在将数组或列表强制转换为纯文本方面做得很差,正如您所述,纯文本只包含数组的第一个元素

    解决: 1.使用
    do shell脚本
    命令 而不是:

    set Storage to get the clipboard
    
    尝试:

    2.使用AppleScriptObjC 由于自动机操作可能是用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
    
        on run {input, parameters}
    
            set the text item delimiters to linefeed
            set Storage to the input as text
    
            display dialog Storage
    
        end run
    
    3.通过
    输入
    变量访问数据 Automator中的
    运行AppleScript
    操作获取上一个操作的结果,并将其存储在运行{input,parameters}处理程序时附加到
    的变量中,即
    输入
    (您可以忽略
    参数

    目前,您的工作流实际上将剪贴板的内容(复制到剪贴板操作的输出)直接发送到AppleScript的
    输入变量

    因此,您可以使用以下内容替换整个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
    
        on run {input, parameters}
    
            set the text item delimiters to linefeed
            set Storage to the input as text
    
            display dialog Storage
    
        end run
    


    这些解决方案中的任何一个都应该有效,因此只需选择您喜欢的方法即可Number#3可能在您当前的设置中最有意义,也是最简单的。

    显示您如何设置
    Get Value of Variable
    以及他们如何选择它们。添加“Get Value of Variable”,然后将变量名称设置为“testforstackoverflowanswer”你好,朋友,我不得不说,你真的达到了目标,这就是我想要的,谢谢you@JasonWang:请单击此答案上方的复选标记(“接受”)。这表明答案解决了你的问题,并通过给予帮助你的人声誉来奖励他们。再次感谢,我点击了它