Join-Path
было бы способом найти путь к несуществующему элементу, я полагаю.Примерно так:
join-path $pwd $filename
Обновление:
Я не понимаю, почему вы не хотите использовать .Net "код".Powershell основан на .Net.Все командлеты имеют код .Net.Единственная действительная причина этого заключается в том, что при использовании .Net Code текущим каталогом является каталог, из которого был запущен Powershell, а не $pwd
. Я просто перечисляю способы, которые, по моему мнению, можно сделатьчто вы можете обрабатывать абсолютные и относительные пути.Ни один из них не кажется проще, чем GetFullPath()
:
$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath($filename)
Если вас беспокоит, пройден ли абсолютный путь или нет, вы можете сделать что-то вроде:
if(Split-Path $filename -IsAbsolute){
$filename
}
else{
join-path $pwd $filename # or join-path $pwd (Split-Path -Leaf $filename)
}
Этоуродливый
$item = Get-Item $filename -ea silentlycontinue
if (!$item) {
$error[0].targetobject
} else{
$item.fullname
}
Аналогичный вопрос с похожими ответами: Powershell: определить путь, который может не существовать?