Диалоги обработки 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

Но запуск этого скрипта вызывает исключение — появляется диалоговое окно поиска, в котором говорится, что файл уже существует в исходном местоположении, с тремя вариантами: «Сохранить оба», «остановить» и «заменить». Я бы хотел, чтобы скрипт автоматически выбирал «заменить».

Есть идеи?


person Altimus    schedule 18.06.2017    source источник


Ответы (2)


Вам предстоит столкнуться с рядом проблем:

Последнее расположение файла хранится в корзине .ds_store. Для некоторых файлов (если исходная папка удалена) путь не будет существовать в этом файле, и опция возврата не будет работать (поэтому ваш скрипт не будет работать) — вы увидите, что он неактивен в контекстном меню, если вы попробуете это вручную.

Тогда методы графического интерфейса нажатия клавиш ничего не вернут, поэтому вы не можете контролировать дальнейшие шаги, такие как перезапись файлов.

Имхо, лучший подход — прочитать исходные местоположения, а затем создать команды перемещения с параметрами перезаписи.

В другой теме кто-то написал перл-скрипт для этого: https://superuser.com/a/867988

Запустите скрипт как

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

Затем выполните все команды перемещения с помощью сценария оболочки, как указано выше. Лучше всего то, что вы можете изменить сценарий, чтобы добавить такие параметры, как не перезаписывать, если существует «mv -n». Я не тестировал сценарий, просто прочитал его. Возможно, вы сможете передать команды, чтобы сделать все это за меньшее количество шагов.

Обратите внимание, что это будет работать для файлов, в которых существует исходная папка. Если у вас разные ситуации, вам нужно настроить его так, чтобы папки создавались.

person Pat_Morita    schedule 18.06.2017

Это работает для меня с последней версией 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
person wch1zpink    schedule 18.06.2017