Bu AppleScript kodu benim için macOS Mojave'ın en son sürümünü kullanarak çalışıyor.
Bu kod, her öğeyi orijinal konumlarına geri getirerek, çöp kutusundaki her öğe boyunca dolaşır.
Çöp Kutusundaki dosyaların orijinal kaynak klasörlerinden biri artık mevcut değilse, repeat until trashCount is 0
komut döngüden çıkar. Çöp Kutusunda kalan dosyalar yalnızca bu nedenle geri alınamayacak dosyalar olacaktır.
GÜNCELLEME
Dosyaları çöp kutusundan geri alma işleminin yinelenen döngüleri sırasında masaüstünüzdeki bir öğeyi seçmek mümkün olduğundan, seçilen masaüstü öğesi işlem sırasında yakalanabilir ve çöp kutusuna taşınabilir. Bu senaryodan kaçınmak için, kilidi açılmış olan Masaüstü öğelerini kilitleyecek ve ayrıca komut dosyasının sonunda kilidini açacak kod ekledim.
Tüm Masaüstü öğeleri artık kilitli olduğundan ... Çöpten dosyaları geri getirme işlemi sırasında, bir nedenden dolayı yanlışlıkla masaüstünüzde bir dosya veya klasör seçtiyseniz ve kod seçili masaüstü öğesini işlemeye çalışırsa ... o öğenin kilitli olduğunu belirten bir iletişim penceresi oluşturun ve onu çöp kutusuna göndermeye devam etmek isteyip istemediğinizi sorun. Sistem Olayları, betiğin sonuna doğru blok oluşturulmuş olan bu iletişim kutularının herhangi birini idare edeceğini söylüyor.
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