Automator "copy finder object" 与 AppleScript

Automator "copy finder object" with AppleScript

我创建了一个 Apple Automator 服务

这些都是来自 Automator 的命令。但是,作为 Automator 命令复制只能复制到预定义的文件夹。

我想通过一个 AppleScript 来控制这部分,它会读出用户名并相应地选择一个文件夹:

on run {input, parameters}
    
    set user_script to "echo $USER"
    set username to do shell script user_script
    
    if username = "A" then
        set standardpfad to "/Users/" & username & "/whatever"
    else if username = "B" then
        set standardpfad to "/Users/" & username & "/foo"
    else
        display dialog "I don't know this user!" with title "ERROR" buttons {"OK"} default button "OK"
        return
    end if
    
    #actual copying
                
end run

不幸的是,我不知道如何以类似于 Automator 中的“复制查找器对象”命令的方式处理输入。谁能帮帮我?

谢谢!

编辑: 自动机截图

按照您的原始脚本,它似乎想要将所有文件移动到用户的主文件夹,您可以使用自动变量完成您想要的。首先,转到 Automator window 的左上角,单击显示 'Variables' 的选项卡按钮,然后单击 'Locations' 项。寻找显示 'Home' 的项目(我相信在您的机器语言上是 'Privat'):

这提供了用户主文件夹的路径,无论哪个用户都是 运行 工作流程(独立于系统和机器)。将此变量拖到 Copy Finder Items (Finder-objekte kopieren) 操作上,然后将其放在 'To:' ('Nach:') 下拉菜单中。它应该是这样的:

这应该可以解决问题。

有多种系统定义的用户路径可供您选择。您还可以使用特殊的 'Text' 变量(在 'Text & Data' 下)定义一个自定义文件夹,在标准 unix 符号中键入一个路径,其中波浪号 ('~') 代表用户的主文件夹:例如,~/path/to/Custom Folder/.

如果你正在做一些更复杂的事情并且真的需要使用Run AppleScript操作,你需要知道的是文件列表被传递到input 变量中的操作作为别名列表,无论您 return (应该是别名列表还是 posix 路径),都将传递到下一个操作。例如:

on run {input, parameters}
    set output to {}
    repeat with this_item in input
        set new_item to this_item -- ... obviously you'd do something other than just copy
        copy new_item to end of output
    end repeat
    
    return output
end run

但你似乎不需要在这里这样做;特殊的 Automator 变量应该可以让您到达目的地。

编辑

根据评论,这里是工作流程的修订版...

将以下操作添加到问题中给出的工作流中,以代替“复制查找器对象”操作。请注意,第二个和第六个操作设置为忽略前一个操作的输入。这些操作执行以下操作:

  1. 将要复制的文件列表保存到名为'FileToCopy'的存储变量中;不传递任何数据
  2. 获取用户主文件夹的路径;传递给下一个动作
  3. 获取用户的'user name';将主文件夹和用户名作为列表传递给下一个操作
  4. 运行 从输入列表构造 unix 路径字符串的 AppleScript;将完成的路径字符串传递给下一个操作
  5. 将路径字符串保存到名为'DestinationFolder'的变量中;不传递任何数据
  6. 检索我们在步骤#1 中保存的要复制的文件列表;传递给下一个动作
  7. 使用我们在步骤#5 中保存的 'DestinationFolder' 变量将文件复制到选定的文件夹;将这些传递给 Rename Finder Items 操作(此处未显示)

试一试,让我知道它是如何工作的。