Applescript 自动机“;“复制查找器对象”;用苹果笔迹

Applescript 自动机“;“复制查找器对象”;用苹果笔迹,applescript,automator,Applescript,Automator,我创建了一个Apple Automator服务 接收PDF文件 加密它们 将加密的PDF复制到目标文件夹 重命名加密的PDF文件 这些都是来自自动机的命令。但是,“作为自动机复制”命令只能复制到预定义的文件夹 我想通过一个AppleScript来控制这一部分,它读取用户名并相应地选择一个文件夹: on run {input, parameters} set user_script to "echo $USER" set username to d

我创建了一个Apple Automator服务

  • 接收PDF文件
  • 加密它们
  • 将加密的PDF复制到目标文件夹
  • 重命名加密的PDF文件
这些都是来自自动机的命令。但是,“作为自动机复制”命令只能复制到预定义的文件夹

我想通过一个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中的“Copy Finder object”命令的方式处理输入。有人能帮我吗

谢谢大家!

编辑: 自动机截图

按照您的原始脚本,它似乎希望将所有文件移动到用户的主文件夹,您可以使用automator变量完成您想要的操作。首先,转到Automator窗口的左上角,单击显示“变量”的选项卡按钮,然后单击“位置”项。查找标有“Home”(我相信这是您机器语言中的“Privat”)的项目:

这将为运行工作流的用户(独立于系统和机器)提供用户主文件夹的路径。将此变量拖到
复制查找器项
(查找器对象kopieren)操作上,并将其放到“to:”(“Nach:”)下拉菜单上。应该是这样的:

这应该能奏效

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

如果您正在执行更复杂的操作,并且确实需要使用
Run AppleScript
操作,那么您需要知道的是,文件列表作为别名列表传递到
input
变量中的操作中,以及您
返回的任何内容(应该是别名列表或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
但在这里你似乎不需要这样做;特殊的自动机变量应该能让你找到你要去的地方

编辑

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

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

  • 将要复制的文件列表保存到名为“FileToCopy”的存储变量中;不传递数据
  • 获取用户主文件夹的路径;将其传递到下一个操作
  • 获取用户的“用户名”;将主文件夹和用户名作为列表传递给下一个操作
  • 运行从输入列表构造unix路径字符串的AppleScript;将完成的路径字符串传递给下一个操作
  • 将路径字符串保存到名为“DestinationFolder”的变量中;不传递数据
  • 检索在步骤#1中保存的要复制的文件列表;将其传递到下一个操作
  • 使用步骤#5中保存的'DestinationFolder'变量将文件复制到所选文件夹;将这些传递到重命名查找器项操作(此处未显示)

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

    您可以使用自动机变量在运行时设置目标;你看过吗?了解更多关于您的程序流程也会有所帮助。此工作流是否批量处理文件;使用循环动作逐个处理它们;或者一次只处理一个文件?工作流从finder接收突出显示的文件,并通过快捷方式或关联菜单执行。我注意到了定义变量的可能性,但没有看到任何基于用户名的可能性。这就是为什么我提出了AppleScript/shell:-/Ok,如果您需要这方面的帮助,下面是我需要知道的相关信息。您是批量处理文件,还是一次处理一个文件?您是在同一次运行中处理来自不同用户的文件,还是始终是同一用户?您是从用户帐户、root帐户还是管理员帐户运行此操作?好的,我添加了一个德语屏幕截图-可能会有所帮助。文件是批量处理的,并且总是由一个用户执行(无需切换)。我之所以希望有用户,是因为工作流应该分布到各个Mac(而不是一台设备上的多个用户)。脚本是从用户帐户运行的。非常感谢!我签出了变量,但我认为它们不适合我,因为我需要一个文件夹名,具体取决于用户名。例如,当Bos运行脚本时,他复制到~/BobsFolder/输出,当Pete运行脚本时,脚本复制到~/PetesFolder/另一个文件夹。我试图运行您的AppleScript而不是“复制查找项”,但什么也没发生。实际上,我认为复制正是我所需要的,因为我正在替换“Copy Finder Items”函数。我提供的AppleScript就是一个例子,它明确地说除了将输入复制到输出之外什么都不做。您需要对其进行修改,使其能够执行某些操作。但“变量”方法仍然有效。给我一点时间,我会发布一个修订版。它很有效,非常感谢oyu!!!还有一个问题:当我多次运行脚本进行测试时,我注意到目标文件夹中的加密文件以数字作为后缀,例如“filename(encrypted)14.pdf”。在复制之前,是否所有文件都缓冲在某个隐藏的位置?或者系统如何知道我已经在某个文件上运行了多少次脚本?我希望避免在系统中的某个地方堆积加密的PDF;)@Cerd:当系统将一个文件复制到一个已经有同名文件的文件夹中时,它会添加一个索引:例如,如果您将“MyFile.doc”多次复制到同一文件夹中,您将