2012-09-12 77 views
17

Tôi muốn chuyển đổi đường dẫn sang đường dẫn tương đối trong tập lệnh PowerShell. Làm cách nào để thực hiện việc này bằng PowerShell?Làm cách nào để chuyển đổi đường dẫn tuyệt đối thành đường dẫn tương đối trong PowerShell?

Ví dụ:

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 

Trả lời

38

tôi tìm thấy một cái gì đó được xây dựng trong, Resolve-Path:

Resolve-Path -Relative 

này trả về đường dẫn tương đối đến vị trí hiện tại. Cách sử dụng rất đơn giản:

$root = "C:\Users\Dave\" 
$current = "C:\Users\Dave\Documents\" 
$tmp = Get-Location 
Set-Location $root 
Resolve-Path -relative $current 
Set-Location $tmp 
+14

Thay vì sử dụng biến tạm thời, bạn cũng có thể sử dụng Push-Location và Pop-Location để đặt vị trí và sau đó quay lại giá trị ban đầu của nó. Cùng một giải pháp cơ bản nhưng không có biến tạm thời. –

1

Get-RelativePath dường như là một cách để làm điều đó.

+0

Nhưng có vẻ phức tạp và chậm chạp. Không có cách nào tốt hơn để làm điều đó? –

+1

Phức tạp chậm và lỗi. –

+0

Liên kết không hoạt động nữa – Honzajscz

-1

Dưới đây là một cách tiếp cận khác

$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 

Lưu ý: trong đường dẫn trường hợp ref thứ hai không được sử dụng.

+0

Tôi nghĩ bạn đã hiểu nhầm hai ví dụ. Tôi muốn một cách tiếp cận để giải quyết cả hai. –

+0

Có, tôi đã hiểu lầm ví dụ của bạn vì nó trỏ đến đường dẫn tuyệt đối của tệp. – yantaq

+0

Không phải OP, nhưng đây là những gì tôi đang tìm kiếm để giải quyết vấn đề của tôi. Cám ơn –

Các vấn đề liên quan