如何在不使用任何第三方工具或手动的情况下将 UNC Windows 文件路径转换为文件 URI?

如何在不使用任何第三方工具或手动的情况下将 UNC Windows 文件路径转换为文件 URI?

在一个博客文章来自微软的他们说明了如何编写 URI 来指定本地系统文件路径。

当共享网络共享文件的路径时,一些聊天程序会在浏览器中打开这些文件。

因此我手动编写了将 Windows 路径转换为文件 URI 所需的更改

UNC Windows path: \\sharepoint.business.com\DavWWWRoot\rs\project 1\document.txt

变成

URI: file://sharepoint.business.com/DavWWWRoot/rs/project%201/document.txt

我厌倦了每次手动编码,并想知道是否有办法快速转换为文件 URI。

我的机器没有管理员权限,所以我无法安装软件。

答案1

PowerShell 是自动执行上述繁琐重复任务的绝佳方法!

使用 PowerShellUsing PowerShell

使用 PowerShell(所有版本)将上述 UNC 路径转换为文件 URI 非常简单,只需要格式并替换运算符, 例如:

$Path = "\\sharepoint.business.com\DavWWWRoot\rs\project 1\document.txt"

# replace back slash characters with a forward slash, url-encode spaces,
# and then prepend "file:" to the resulting string

# note: the "\\" in the first use of the replace operator is an escaped
# (single) back slash, and resembles the leading "\\" in the UNC path
# by coincidence only

"file:{0}" -f ($Path -replace "\\", "/" -replace " ", "%20")

得出以下结论:

file://sharepoint.business.com/DavWWWRoot/rs/project%201/document.txt

作为可重用函数

最后,应尽可能将上述重复任务制作成 PowerShell 函数。这样可以节省将来的时间,并确保每个任务始终以完全相同的方式执行。

以下函数与上述函数等效:

function ConvertTo-FileUri {
    param (
        [Parameter(Mandatory)]
        [string]
        $Path
    )

    $SanitizedPath = $Path -replace "\\", "/" -replace " ", "%20"
    "file:{0}" -f $SanitizedPath
}

一旦定义了函数(并将其加载到当前 PowerShell 会话中),只需按名称调用该函数并提供要转换的 UNC 路径作为参数,例如:

ConvertTo-FileUri -Path "\\sharepoint.business.com\DavWWWRoot\rs\project 1\document.txt"

答案2

最简单的方法是使用 PowerShell 代码中的 .Net URI 类:

[System.Uri]'\sharepoint.business.com\DavWWWRoot\rs\project 1\document.txt' 将为您提供一个 URI,然后“AbsoluteURI”属性将以字符串形式为您提供该 URI。因此:

([System.Uri]'\\sharepoint.business.com\DavWWWRoot\rs\project 1\document.txt').AbsoluteUri

会给你你想要的。

答案3

有一个简单且安全的在线转换器可以完成这项工作:UNC 路径到文件 URI 在线转换器

它是用 Javascript 实现的,并且转换完全在浏览器中完成,因此路径不会提交给任何服务器。

答案4

结合 Andrew 和 Devyn 提出的观点,我有了这个函数,它可以接受相对文件路径,例如“.\Documents\test.txt”:

function ConvertTo-FileUri {
    param (
        [Parameter(Mandatory)]
        [string]
        $Path
    )
    ([system.uri](Get-Item $Path).FullName).AbsoluteUri
}

相关内容