AppleScript用于获取所选文件的POSIX路径,也适用于网络驱动器

时间:2015-02-17 09:52:36

标签: path terminal applescript posix finder

我正在努力创建功能,我可以右键单击OSX Finder中的视频文件,按“服务”和我的脚本名称,然后MediaInfo将加载到终端,视频标签数据将显示(通过MediaInfo)。我得到它在本地驱动器中的文件工作。但它不适用于网络驱动器,因为/路径中缺少卷,MediaInfo无法找到该文件。

我已将以下脚本设置为在Automator中运行AppleScript,保存为服务("服务在Finder中接收选定的文件或文件夹"在Automator的顶部)。

tell application "Finder"
    set theItems to selection
    repeat with itemRef in theItems
        set myfolder to (get folder of itemRef) as string
        set myfolder to POSIX path of myfolder
        set myfile to "'" & myfolder & (get name of itemRef) & "'"
    end repeat -- it will store the last filename in selection
end tell

tell application "Terminal"
    activate
    do script

    set size of window 1 to {1200, 1200}

    set cmd to "mediainfo " & myfile
    try
        if busy of selected tab of window 1 then error
        do script with command cmd in window 1
    on error
        do script with command cmd
    end try
end tell

那么当网络驱动器出现问题时,为了在路径的开头包含/ Volumes,需要更改什么?

3 个答案:

答案 0 :(得分:1)

经过一些试验和错误后,这似乎是一个有用的脚本(将此脚本作为上下文菜单项运行,以在放大的新终端窗口中显示MediaInfo输出):

tell application "Finder" to set theItems to selection
repeat with itemRef in theItems
    set myitem to "'" & POSIX path of (itemRef as string) & "'"
end repeat -- it will store the last filename in selection

tell application "Terminal"
    launch
    activate
    do script
    set size of window 1 to {1200, 1200}
    do script "mediainfo " & myitem in window 1
end tell

答案 1 :(得分:0)

您可以获取Finder项目的磁盘属性,然后您可以检查磁盘是否将本地音量设置为false。

我没试过这个,但我认为你必须作为一个项目来处理这个项目。 (set theDisk to disk of item yourAlias)。

这至少在理论上应该让你更接近一点,我认为它可以工作,我认为你知道posix路径应该是什么样子,/ Volumes / the network volume / Path to / file and等等。

Finder还有启动盘属性,我认为你可以用它来比较驱动器,如果这对你更好。

所有内容都在AppleScript编辑器的Finder词典中。

答案 2 :(得分:0)

偶然的事情,看不出为什么要隔离文件名然后重新添加它。使用项目名称有时包括扩展名,但有时不包括。网络驱动器尤其如此。 而且,不要把东西放在Finder块里,不需要在那里。上半部分适用于所选文件和文件夹,包括网络驱动器,包括posix路径中的Volumes /。

tell application "Finder" to set theItems to selection
repeat with itemRef in theItems
    set myitem to POSIX path of (itemRef as string)
end repeat -- it will store the last filename in selection