AppleScript 处理对话框,将文件放回废纸篓



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

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 个选项:"保留两者"、"停止"和"替换"。我希望脚本自动选择"替换"。

有什么想法吗?

你必须面对几个问题:

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

然后按键 gui 方法将不会返回任何内容 - 因此您无法控制覆盖文件等进一步步骤。

恕我直言,最好的方法是读出原始位置,然后创建带有覆盖选项的移动命令。

在另一个线程上,有人编写了一个珍珠脚本来做到这一点: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脚本执行所有移动命令。最好的事情是你可以chsnge脚本来添加选项,如如果存在"mv -n",则不要覆盖。我没有测试脚本只是通读了它。您也许可以通过管道传输命令,以便只需更少的步骤即可完成所有操作。

请注意,这将适用于存在原始文件夹的文件。如果您有不同的情况,则需要对其进行调整,以便创建文件夹

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

tell application "Finder"
close every window
activate
open trash
select every item of trash
delay 1
end tell
tell application "System Events"
key code 51 using (command down)
delay 1
try
set theCheckbox to checkbox "Apply to All" of scroll area 1 of window "Copy" of application process "Finder"
set applyToAll to perform action "AXPress" of checkbox "Apply to All" of scroll area 1 of window "Copy" of application process "Finder"
set replaceButton to perform action "AXPress" of button "Replace" of scroll area 1 of window "Copy" of application process "Finder"
if theCheckbox exists then
delay 1
applyToAll
delay 1
replaceButton
else
key code 51 using (command down)
end if
end try
end tell

相关内容

  • 没有找到相关文章

最新更新