Ви можете використовувати комбінацію pwd
, Join-Path
і [System.IO.Path]::GetFullPath
отримати повну розширений шлях.
Оскільки cd
( Set-Location
) не змінює поточний робочий каталог процесу, просто передача відносного імені файлу .NET API, який не розуміє контекст PowerShell, може мати ненавмисні побічні ефекти, наприклад, вирішення шляху, заснованого на початковій робочій каталог (не ваше поточне місцезнаходження).
Що ви робите, це спочатку кваліфікуєте свій шлях:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
Це дає (враховуючи моє поточне місцезнаходження):
C:\WINDOWS\system32\fred\frog\..\frag
З абсолютною базою безпечно викликати .NET API GetFullPath
:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
Що дає вам повністю кваліфікований шлях та з ..
видаленими:
C:\WINDOWS\system32\fred\frag
Це не складно або, особисто я гидував рішення , які залежать від зовнішніх скриптів для цього, це просто проблема вирішується досить точно з допомогою Join-Path
і pwd
( GetFullPath
це просто зробити це досить). Якщо ви хочете зберегти лише відносну частину , ви просто додаєте .Substring((pwd).Path.Trim('\').Length + 1)
і вуаля!
fred\frag
ОНОВЛЕННЯ
Дякую @Dangph за вказівку на крайній C:\
регістр.