Dieser AppleScript-Code funktioniert für mich mit der neuesten Version von macOS Mojave.
Dieser Code durchläuft alle Elemente im Papierkorb und setzt sie an ihren ursprünglichen Speicherort zurück.
Wenn einer der ursprünglichen Quellordner der Dateien im Papierkorb nicht mehr vorhanden ist, beendet der repeat until trashCount is 0
Befehl die Schleife. Alle verbleibenden Dateien im Papierkorb sind nur Dateien, die aus diesem Grund nicht zurückgesetzt werden konnten.
AKTUALISIEREN
Da es möglich ist, ein Element auf Ihrem Desktop während der Wiederholungsschleife des Vorgangs des Zurücksetzens von Dateien aus dem Papierkorb auszuwählen, kann das ausgewählte Desktop-Element in den Prozess geraten und in den Papierkorb verschoben werden. Um dieses Szenario zu vermeiden, habe ich Code hinzugefügt, der die derzeit entsperrten Desktop-Elemente sperrt und sie auch am Ende des Skripts entsperrt.
Da jetzt alle Desktop-Elemente gesperrt sind ... Wenn Sie während des Zurücksetzens von Dateien aus dem Papierkorb versehentlich eine Datei oder einen Ordner auf Ihrem Desktop auswählen und der Code versucht, das ausgewählte Desktop-Element zu verarbeiten, wird dies ausgeführt Generieren Sie ein Dialogfenster, in dem darauf hingewiesen wird, dass das Objekt gesperrt ist, und fragen Sie, ob Sie es weiterhin in den Papierkorb verschieben möchten. Der Tell-Block "Systemereignisse" gegen Ende des Skripts verarbeitet möglicherweise generierte Dialogfelder.
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