通过Finder和Applescript复制项目:如何获取"项目存在 - 替换?" Finder中的对话框?

Tho*_*ann 5 macos applescript finder

在我的应用程序中,我喜欢让OSX Finder复制文件或文件夹.

(注意:我有充分的理由使用Finder而不是使用shell cmds,NSWorkspace或其他方法,因此不需要在这方面提出建议.)

我目前依靠Applescript要求Finder执行复制操作.这是一个用于测试的示例脚本:

tell application "Finder"
    try
        copy file POSIX file "/etc/bashrc" to folder POSIX file "/private/tmp"
        -- alternative with same behavior:
        --duplicate POSIX file "/etc/bashrc" to POSIX file "/private/tmp"
    on error errmesg number errn
        display dialog "Error thrown: " & errmesg
    end try
end tell
Run Code Online (Sandbox Code Playgroud)

现在的问题是:如果目标项已经存在,脚本将引发错误并取消复制操作.

但是,我宁愿让Finder显示"项目存在"对话框,它在交互式Finder中进行这样的复制操作时会显示,如下所示:

Finder

现在,问题是: 如果我从第三方应用脚本调试器运行此脚本,则会出现此对话框!

因此,显然有一种方法可以让Finder显示对话框而不是抛出异常.但是怎么样?谁知道这个的秘密?

kop*_*hke 0

看起来实际上没有办法让 Finder 在使用 AppleScript \xe2\x80\x93 时显示对话框,至少当脚本在常规环境中运行时是这样。在我的测试中,当目标已经存在时, Finder \xe2\x80\x99s 和系统事件\xe2\x80\x99 文件move命令始终会出错 \xe2\x80\x93 唯一的区别是,除了语义之外,Finder 提供了replacing抑制此行为的开关,意味着true目标文件将在没有提示的情况下被覆盖,但没有选项可以将其设置为ask(请参阅此 MacScripter 线程以获取完全相同问题的讨论)。

\n\n

如果不了解其内部工作原理,我只能冒险猜测脚本调试器以不同方式处理此问题很可能是由于它不在正常环境中运行脚本。\xe2\x80\x99 很难想象它如何在不创建自己的脚本执行层的情况下连接到脚本的内部工作来完成其作为调试器的工作。这样的中间层可以解释为什么在 Finder 的情况下命令以不同的方式转发到应用程序 \xe2\x80\x93 和move低级别 Finder 复制例程(这将显示对话框)。

\n\n

这让您可以按照 Paul R 的建议自行重新实现该功能,或者转向AppleScript-ObjectiveC(这不是我的专业领域,我害怕\xe2\x80\x99m)。

\n