Диалоги обработки 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
Другие вопросы по тегам