Bạn có thể sử dụng kết hợp pwd
, Join-Path
và [System.IO.Path]::GetFullPath
để có được một con đường nở đầy đủ.
Vì cd
( Set-Location
) không thay đổi thư mục làm việc hiện tại của quy trình, chỉ cần chuyển tên tệp tương đối đến API .NET không hiểu ngữ cảnh PowerShell, có thể có các tác dụng phụ không mong muốn, chẳng hạn như phân giải thành một đường dẫn dựa trên hoạt động ban đầu thư mục (không phải vị trí hiện tại của bạn).
Những gì bạn làm là trước tiên bạn đủ điều kiện cho con đường của mình:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
Điều này mang lại (với vị trí hiện tại của tôi):
C:\WINDOWS\system32\fred\frog\..\frag
Với cơ sở tuyệt đối, có thể an toàn khi gọi .NET API GetFullPath
:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
Điều này cung cấp cho bạn đường dẫn đủ điều kiện và với đường dẫn ..
đã bị xóa:
C:\WINDOWS\system32\fred\frag
Nó cũng không phức tạp, cá nhân tôi không thích các giải pháp phụ thuộc vào các tập lệnh bên ngoài cho việc này, vấn đề đơn giản được giải quyết khá khéo léo bởi Join-Path
và pwd
( GetFullPath
chỉ là làm cho nó đẹp). Nếu bạn chỉ muốn giữ lại phần tương đối , bạn chỉ cần thêm .Substring((pwd).Path.Trim('\').Length + 1)
và thì đấy!
fred\frag
CẬP NHẬT
Cảm ơn @Dangph đã chỉ ra C:\
trường hợp cạnh.