Macos 有没有办法在AppleScript中获取文件的完整路径?

Macos 有没有办法在AppleScript中获取文件的完整路径?,macos,scripting,applescript,Macos,Scripting,Applescript,使用POSIX path返回如下所示的字符串: “/Volumes/Parent Folder/File.fl” 但我需要一个完整的路径,如下所示: "smb://something.domain.com/Parent 文件夹/File.fl“ 在applescript中有这样做的方法吗?我需要能够获取网络源或已装入卷的信息,以便生成供人们单击的URL。问题: 有没有办法在AppleScript中获取文件的完整路径? 我需要能够获得网络资源或装载卷的信息,以便我可以生成供人们点击的URL 由于您

使用POSIX path返回如下所示的字符串:

“/Volumes/Parent Folder/File.fl”

但我需要一个完整的路径,如下所示:

"smb://something.domain.com/Parent 文件夹/File.fl“


在applescript中有这样做的方法吗?我需要能够获取网络源或已装入卷的信息,以便生成供人们单击的URL。

问题:

有没有办法在AppleScript中获取文件的完整路径?
我需要能够获得网络资源或装载卷的信息,以便我可以生成供人们点击的URL

由于您的问题有些含糊不清,下面是一个AppleScript,它提供了对Finder.app中所选文件的所有引用

tell application "Finder"
    set {oFile} to selection
    set fileAlias to oFile as alias
    set posixPath to POSIX path of fileAlias
    set fileURL to URL of oFile
end tell

由于您没有在我的评论中提供命令的输出,下面是一个您应该会发现有用的示例:

这实际上是从macOS High SierramacOS Catalina上的SMB共享进行测试的,
posixFileName
是从macOS High Sierra到文件的实际
POSIX路径。因此,未注释的
do shell脚本
命令实际上在实际测试中起作用

——#posixFileName的值是静态分配的,用于演示。
--#假设它将在实际工作脚本中动态分配。
将posixFileName设置为“/Volumes/Temp Folder/Some Stuff/foobar.txt”
--#使用AppleScript的文本项分隔符来解析posixFileName
--#至posixParentFolderName和posixChildFolderAndOrFileName。
--  #
--#例如,posixFileName的posixParentFolderName为:“/Volumes/Temp Folder”
--#例如,posixChildFolderAndOrFileName的posixFileName是:“Some Stuff/foobar.txt”
--  #
将AppleScript的文本项分隔符设置为“/”
将posixParentFolderName设置为posixFileName的文本项1到3作为字符串
将posixChildFolderAndOrFileName设置为posixFileName的文本项4到-1作为字符串
将AppleScript的文本项分隔符设置为“”
--#取消注释工作脚本的下一行代码,但使用
--#下面的示例只是为了测试上面的示例posixFileName。
--将mountOutput设置为执行shell脚本“mount | grep'”和posixParentFolderName&“;退出0”
--#这只是用于演示目的的示例输出,不用于
--#上一行未注释,然后这一行代码被删除。
将输出设置为“//me@192.168.2.103//Volumes/Temp文件夹上的Temp%20文件夹(smbfs、nodev、nosuid,由我装入)”
如果mountOutput不等于“”,则
--#使用AppleScript的文本项分隔符来解析输出
--#获取例如“192.168.2.103/Temp%20文件夹”
将AppleScript的文本项分隔符设置为“开”
将serverPathname设置为mountOutput的第一个文本项
将AppleScript的文本项分隔符设置为“@”
将serverPathname设置为serverPathname的第二个文本项
将AppleScript的文本项分隔符设置为“”
--#组合元素以获取SMB URL。
将smbPathname设置为“smb://”&serverPathname&“/”&posixChildFolderAndOrFileName
--#将所有空格“”替换为“%20”。
将AppleScript的文本项分隔符设置为“”
将smbPathname设置为smbPathname的文本项
将AppleScript的文本项分隔符设置为“%20”
将smbPathname设置为smbPathname作为字符串
将AppleScript的文本项分隔符设置为“”
返回smbPathname
--#结果:smb://192.168.2.103/Temp%20Folder/Some%20Stuff/foobar.txt"
其他的
返回
如果结束

为了清晰起见:您需要的是URL,而不是路径。在AppleScript中,您可以使用
URL来获取文件的URL(请参见答案)。不幸的是,它没有检测到网络源(即,它只会给你一些类似
file:///Volumes/Parent%20Folder/File.fl
)。装入卷后,终端中的
装入| grep'/Volumes/Parent Folder'
的输出是什么?我这样做是因为您可能能够将输出解析为一个可用的SMB URL。@user3439894,用于获取smb://xxx.domain.com/Parent 文件夹--但它仅适用于父文件夹。如果链接指向父目录中的文件或更深层目录,它不返回任何内容这就是为什么我询问输出是什么,以便提供包含完整SMB URL的答案。因此,我需要的是:SMB//xxx.domain.com/parent\u folder/child\u folder/file.fl fileAlias=parent\u folder:child\u folder:file.fl posixPath=Volumes/parent\u folder/child\u folder/file.fl fileURL=file:///Volumes/parent_folder/child_folder/file.fl 不幸的是,这些都不是我需要的