我的情况:
我正在尝试使用Applescript为我的桌面制作一个Trash替代品。如果我双击它,我希望它打开~/.Trash
。如果我将文件或文件夹拖到它,我希望它将所述文件或文件夹移动到废纸篓。并且,与此问题相关,如果我将已安装的卷拖到它上面,我希望它能够弹出所述卷。
我的代码:
on open droppeditems
set filesForTrash to droppeditems as text
if filesForTrash ends with ":" then
display dialog "1"
set found to false
repeat with volume in (list disks)
display dialog (volume as string)
if (volume as string) is (filesForTrash as string) then
set found to true
try
tell application "Finder"
eject filesForTrash
end tell
end try
end if
end repeat
if found is false then
try
tell application "Finder"
move filesForTrash to trash
end tell
end try
end if
else
try
tell application "Finder"
move filesForTrash to trash
end tell
end try
end if
end open
do shell script "open ~/.Trash"
我的问题:
我用iDMG创建了一个非常基本的DMG并安装了它。我将其拖到应用程序中,但在repeat with volume in (list disks)
中,它无法识别我拖到它的卷是list disks
中找到的卷之一,因此在{tell application "Finder" to move filesForTrash
时尝试filesForTrash
1}}是一个卷,所以不能被删除。
我的理想解决方案:
我需要一种方法,我的代码将接受卷,确定它们是卷,然后弹出它们而不是尝试将它们删除。
答案 0 :(得分:1)
首先droppeditems
是别名说明符的列表,强制列表文本连接HFS路径,代码无法正常工作。
您必须使用循环来分别处理每个已删除的项目。
这是一种不同的方法:
System Events
获取该项的volume
并检查POSIX path
以确定它是否为音量。
on open droppeditems
repeat with anItem in droppeditems
tell application "System Events"
set diskItem to disk item (anItem as text)
set itemVolume to volume of diskItem
set isVolume to ("/Volumes/" & itemVolume) is POSIX path of diskItem
end tell
tell application "Finder"
if isVolume and ejectable of disk itemVolume is true then
eject disk itemVolume
else if not isVolume then
move anItem to trash
end if
end tell
end repeat
end open
如果您要删除不可弹出的卷,请在if not isVolume then
之后删除else