Mã AppleScript này hoạt động với tôi bằng cách sử dụng phiên bản macOS Mojave mới nhất.
Mã này sẽ lặp qua từng mục trong thùng rác, đưa từng mục trở lại vị trí ban đầu của chúng.
Nếu bất kỳ thư mục nguồn gốc nào của các tệp trong Thùng rác không còn tồn tại, repeat until trashCount is 0
lệnh sẽ thoát khỏi vòng lặp. Mọi tệp còn lại trong Thùng rác sẽ chỉ là các tệp không thể được đặt lại vì lý do này.
CẬP NHẬT
Vì có thể chọn một mục trên máy tính để bàn của bạn trong vòng lặp lặp của quá trình đặt lại các tệp từ thùng rác, mục máy tính đã chọn có thể bị cuốn vào quy trình và được chuyển vào thùng rác. Để tránh kịch bản này, tôi đã thêm mã sẽ khóa các mục Máy tính để bàn hiện đang mở khóa và cũng sẽ mở khóa chúng ở cuối tập lệnh.
Bởi vì tất cả các mục Máy tính để bàn hiện đang bị khóa ... Trong quá trình đặt lại các tệp từ thùng rác, nếu vì lý do nào đó, bạn vô tình chọn một tệp hoặc thư mục trên máy tính để bàn của mình và mã cố gắng xử lý mục máy tính đã chọn đó ... Nó sẽ tạo một cửa sổ hộp thoại đề cập đến mục đó bị khóa và hỏi bạn có muốn tiếp tục gửi nó vào thùng rác không. Khối thông báo sự kiện hệ thống ở cuối tập lệnh sẽ xử lý bất kỳ hộp thoại nào có thể được tạo.
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