此文件是已装入的卷吗?

时间:2018-04-12 06:02:37

标签: macos file applescript mount-point

我的情况:

我正在尝试使用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}}是一个卷,所以不能被删除。

我的理想解决方案:

我需要一种方法,我的代码将接受卷,确定它们是卷,然后弹出它们而不是尝试将它们删除。

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