Диалоги обработки 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 вариантами: "Сохранить оба", "остановить" и "заменить". Я бы хотел, чтобы скрипт автоматически выбирал "заменить".
Есть идеи?
2 ответа
Вы должны столкнуться с несколькими проблемами:
Последнее местоположение файла хранится в корзине.ds_store. Для некоторых файлов (если исходная папка удалена) путь в этом файле не будет существовать, и опция возврата не будет работать (так что ваш скрипт не будет) - вы увидите его неактивным в контекстном меню, если вы попробуете его вручную.
Тогда методы нажатия клавиш gui ничего не вернут - так что вы не можете контролировать дальнейшие действия, такие как перезапись файлов.
Лучший подход imho - это прочитать исходные местоположения, а затем создать команды перемещения с опциями перезаписи.
В другой теме кто-то написал жемчужный скрипт для этого: /questions/12621347/nastrojka-hranilischa-koda-dlya-nebolshoj-kompanii-zanimayuschejsya-veb-razrabotkoj/12621358#12621358
Запустите скрипт как
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