Я пытаюсь обработать список файлов, которые могут или не могут быть актуальными, и можете, или еще может не существовать. При этом я должен разрешить полный путь объекта, даже при том, что объект может быть указан с относительными путями. Однако Resolve-Path
печать и ошибка при использовании с несуществующим файлом.
Например, Каков самый простой, самый чистый способ решить ".\newdir\newfile.txt"
кому: "C:\Current\Working\Directory\newdir\newfile.txt"
в Powershell?
Отметьте это System.IO.Path
использование статического метода с рабочим каталогом процесса - который не является powershell текущим местоположением.
Вы хотите:
c:\path\exists\> $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\nonexist\foo.txt")
возвращает:
c:\path\exists\nonexists\foo.txt
Это дает преимущество работы с PSPaths, а не с собственными путями файловой системы. PSPAth может не отображать 1-1 в путь файловой системы, например, если вы монтируете psdrive с многобуквенным именем диска.
-Oisin
Перед разрешением проверьте, существует ли файл:
if(Test-Path .\newdir\newfile.txt) { (Resolve-Path .\newdir\newfile.txt).Path }
Думаю, вы на правильном пути. Просто используйте [Environment] :: CurrentDirectory для установки представления .NET о текущем каталоге процесса, например:
[Environment]::CurrentDirectory = $pwd
[IO.Path]::GetFullPath(".\xyz")
Вы можете просто установить -errorAction в "SilentlyContinue" и использовать Resolve-Path
5 > (Resolve-Path .\AllFilerData.xml -ea 0).Path
C:\Users\Andy.Schneider\Documents\WindowsPowerShell\Scripts\AllFilerData.xml
6 > (Resolve-Path .\DoesNotExist -ea 0).Path
7 >