Как я могу преобразовать путь к файлу 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
}
Другие вопросы по тегам