将文件放回垃圾箱时AppleScript处理对话框

时间:2017-06-18 14:04:48

标签: applescript put back recycle-bin

我有一个简单的脚本可以从垃圾箱中取出物品并将它们放回原来的目录中:

repeat 10 times 
    tell application "Finder" to open trash 
    tell application "Finder" to activate
    tell application "System Events"
        tell process "Finder"
            delay 0.2 
            key code 125 
            key down command 
            delay 0.2 
            key code 51         
            key up command      
        end tell
    end tell
    delay 0.2 
    tell application "Finder" to close every window 
end repeat

但运行此脚本会引发异常 - 弹出一个查找器对话框,说该文件已存在于原始位置,有3个选项:'保持两个','停止'并且'替换&#39 ;.我希望脚本能够自动选择“替换”。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你必须面对几个问题:

文件的最后位置存储在trash .ds_store中。对于某些文件(如果原始文件夹被删除),该文件中不存在路径,并且放回选项将不起作用(因此您的脚本不会) - 如果您手动尝试,您将在上下文菜单中看到它变灰。 / p>

然后按键gui方法不会返回任何内容 - 所以你无法控制进一步的步骤,如覆盖文件。

imho的最佳方法是读出原始位置,然后使用覆盖选项创建移动命令。

在另一个主题上,有人写了一个珍珠脚本来做到这一点:https://superuser.com/a/867988

运行类似

的脚本
set ps to "posixpath/to/script.pl"
set moveCommands to do shell script "perl " & quoted form of ps

然后使用上面的do shell脚本执行所有move命令。最好的事情是你可以改变脚本来添加选项,如果存在则不覆盖" mv -n"。我没有测试脚本只是通读它。您可以管道命令,这样您就可以用更少的步骤完成所有操作。

请注意,这适用于原始文件夹所在的文件。如果你有不同的情况,你需要调整它,以便创建文件夹

答案 1 :(得分:0)

这适用于我运行最新版本的OSX Sierra。您可能需要调整一些延迟设置才能适合您

.column {
  width: 48vw;
  height: 48vw;
  padding: 1vw;
  border: 1px solid #ccc;
}
.flex-container {
  display: flex;
  flex-flow: row;
  justify-content: space-between;
}
.flex-item {
  height: 6vw;
  line-height: 6vw;
  text-align: center;
  border: 1px solid #ccc;
  flex: 0 0 6vw;
}