Цей код AppleScript працює для мене, використовуючи останню версію macOS Mojave.
Цей код буде проходити через кожен елемент у кошику, повертаючи кожен елемент у своє початкове місце.
Якщо жодна з оригінальних папок вихідних файлів у кошику більше не існує, repeat until trashCount is 0
команда вийде з циклу. Будь-які файли, що залишилися в кошику, будуть лише файлами, які не вдалося повернути з цієї причини.
ОНОВЛЕННЯ
Оскільки можна вибрати елемент на робочому столі під час повторного циклу процесу повернення файлів із кошика, вибраний елемент робочого столу може потрапити в процес і переміститися до кошика. Щоб уникнути цього сценарію, я додав код, який заблокує розблоковані на даний момент елементи робочого столу, а також розблокує їх у кінці сценарію.
Тому що всі елементи робочого столу зараз заблоковані ... Під час процесу повернення файлів із кошика, якщо ви з якоїсь причини випадково вибрали файл чи папку на робочому столі, і код намагається обробити вибраний елемент робочого столу ... Це буде створіть діалогове вікно із згадкою, що цей елемент заблокований, і запитайте, чи хочете ви продовжувати надсилати його у кошик. Блок повідомлень про системні події в кінці сценарію буде обробляти будь-яке з тих діалогових вікон, які, можливо, були створені.
property desktopFolder : path to desktop
property unlockedFiles : missing value
tell application "Finder"
set trashCount to count of every item of trash
set unlockedFiles to (items of desktopFolder whose locked is false)
repeat with i in unlockedFiles
set locked of i to true
end repeat
end tell
repeat until trashCount is 0
tell application "Finder" to set orphanCount to count of every item of trash
putFilesBack()
tell application "Finder" to set trashCount to count of every item of trash
if orphanCount is equal to trashCount then exit repeat
end repeat
delay 1
tell application "System Events"
repeat until not (exists of button "Stop" of scroll area 1 of window 2 of application process "Finder")
if exists of button "Stop" of scroll area 1 of window 2 of application process "Finder" then
click button "Stop" of scroll area 1 of window 2 of application process "Finder"
end if
end repeat
end tell
tell application "Finder"
close every Finder window
delay 1
repeat with i in unlockedFiles
set locked of i to false
end repeat
end tell
on putFilesBack()
global trashFiles, trashCount, thisItem
tell application "Finder"
set trashFiles to every item of trash
set frontmost to true
repeat while not frontmost
delay 0.1
end repeat
my closeFinderWindows()
end tell
delay 0.1
tell application "System Events"
tell application process "Finder"
repeat with i from 1 to count of trashFiles
set thisItem to item i of trashFiles
delay 0.1
set frontmost to true
select thisItem
delay 0.1
try
key code 51 using {command down}
end try
delay 0.1
my closeFinderWindows()
delay 0.1
end repeat
end tell
end tell
tell application "Finder" to set trashCount to count of every item of trash
end putFilesBack
on closeFinderWindows()
tell application "Finder"
set finderWindowRef to (a reference to (every Finder window whose name is not "Trash"))
set finderWindowRef to contents of finderWindowRef
close (items of finderWindowRef)
end tell
end closeFinderWindows