Как я могу преобразовать путь к файлу UNC Windows в URI файла без использования сторонних инструментов или вручную?
В своем блоге от Microsoft они иллюстрируют, как можно написать 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 файла.
У меня нет прав администратора на моей машине, поэтому я не могу установить программное обеспечение.
3 ответа
Самый простой подход - использовать класс.Net URI из кода PowerShell:
[System.Uri] '\ sharepoint.business.com \ DavWWWRoot \ rs \ project 1 \ document.txt' выдаст вам URI, а затем свойство "AbsoluteURI" выдаст его в виде строки. Так:
([System.Uri]'\\sharepoint.business.com\DavWWWRoot\rs\project 1\document.txt').AbsoluteUri
даст вам то, что вы хотите.
PowerShell - это отличный способ автоматизировать утомительные повторяющиеся задачи, подобные описанным выше!
Использование PowerShell
Преобразование указанного выше UNC-пути в URI файла чрезвычайно просто с помощью PowerShell (все версии) и требует только операторов форматирования и замены, например:
$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"
Существует простой и безопасный онлайн-конвертер, который выполняет эту работу: UNC Path to File URI Online Converter.
Он реализован с использованием Javascript, и преобразование полностью выполняется в браузере, поэтому путь не передается ни на один сервер.
Объединив то, что придумали Эндрю и Девин, я получил эту функцию, которая принимает относительные пути к файлам, такие как ".\Documents\test.txt":
function ConvertTo-FileUri {
param (
[Parameter(Mandatory)]
[string]
$Path
)
([system.uri](Get-Item $Path).FullName).AbsoluteUri
}