Как преобразовать абсолютный путь в относительный путь в PowerShell?

19

Я хотел бы преобразовать путь в относительный путь в сценарии PowerShell. Как это сделать с помощью PowerShell?

Например:

Path to convert: c:\documents\mynicefiles\afile.txt
Reference path:  c:\documents
Result:          mynicefiles\afile.txt

и

Path to convert: c:\documents\myproject1\afile.txt
Reference path:  c:\documents\myproject2
Result:          ..\myproject1\afile.txt
    
задан Dave Hillier 12.09.2012 в 22:51
источник

4 ответа

38

Я нашел что-то встроенное, Решить путь :

Resolve-Path -Relative

Возвращает путь относительно текущего местоположения. Простое использование:

$root = "C:\Users\Dave\"
$current = "C:\Users\Dave\Documents\"
$tmp = Get-Location
Set-Location $root
Resolve-Path -relative $current
Set-Location $tmp
    
ответ дан Dave Hillier 12.09.2012 в 23:13
источник
  • Вместо использования временной переменной вы также можете использовать Push-Location и Pop-Location для установки местоположения, а затем вернуться к исходному значению. Это же базовое решение, но без временной переменной. –  John Bledsoe 14.04.2014 в 19:44
1

Get-RelativePath , похоже, способ сделать это.

    
ответ дан driis 12.09.2012 в 22:54
источник
  • Но он выглядит ужасно сложным и медленным. Разве нет лучшего способа сделать это? –  Peter Mortensen 27.09.2015 в 22:57
  • Сложная медленная и багги. –  Warren P 12.12.2016 в 18:55
  • Ссылка не активна больше –  Honzajscz 06.06.2017 в 22:31
-1

(get-item $ relative_path) .FullName

    
ответ дан Aridane Álamo 16.05.2018 в 14:01
источник
  • Дает ли полное имя относительный путь или абсолютный? –  Dave Hillier 16.05.2018 в 23:28
-2

Вот альтернативный подход

$pathToConvert1 = "c:\documents\mynicefiles\afile.txt"
$referencePath1 = "c:\documents"
$result1 = $pathToConvert1.Substring($referencePath1.Length + 1)
#$result1:  mynicefiles\afile.txt


И

$pathToConvert2 = "c:\documents\myproject1\afile.txt"
#$referencePath2 = "c:\documents\myproject2"
$result2 = "..\myproject" + [regex]::Replace($pathToConvert2 , ".*\d+", '')
#$result2:          ..\myproject\afile.txt

Примечание: во втором случае путь ссылки не использовался.

    
ответ дан yantaq 23.10.2015 в 00:47
источник
  • Я думаю, вы неправильно поняли два примера. Я хочу один подход к решению обоих. –  Dave Hillier 24.10.2015 в 23:14
  • Да, я неправильно понял ваш пример, так как он указывает на абсолютный путь к файлу. –  yantaq 26.10.2015 в 22:54
  • Не ОП, но это то, что я искал для решения моей проблемы. Спасибо –  B_Dubb86 30.06.2017 в 17:21