Powershell: разрешите путь, который не мог бы существовать?

Я пытаюсь обработать список файлов, которые могут или не могут быть актуальными, и можете, или еще может не существовать. При этом я должен разрешить полный путь объекта, даже при том, что объект может быть указан с относительными путями. Однако Resolve-Path печать и ошибка при использовании с несуществующим файлом.

Например, Каков самый простой, самый чистый способ решить ".\newdir\newfile.txt" кому: "C:\Current\Working\Directory\newdir\newfile.txt" в Powershell?

Отметьте это System.IO.Pathиспользование статического метода с рабочим каталогом процесса - который не является powershell текущим местоположением.

50
задан Eamon Nerbonne 14 June 2010 в 04:09
поделиться

4 ответа

Вы хотите:

c:\path\exists\> $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(".\nonexist\foo.txt")

возвращает:

c:\path\exists\nonexists\foo.txt

Это дает преимущество работы с PSPaths, а не с собственными путями файловой системы. PSPAth может не отображать 1-1 в путь файловой системы, например, если вы монтируете psdrive с многобуквенным именем диска.

-Oisin

77
ответ дан 7 November 2019 в 10:40
поделиться

Перед разрешением проверьте, существует ли файл:

if(Test-Path .\newdir\newfile.txt) { (Resolve-Path .\newdir\newfile.txt).Path }
-3
ответ дан 7 November 2019 в 10:40
поделиться

Думаю, вы на правильном пути. Просто используйте [Environment] :: CurrentDirectory для установки представления .NET о текущем каталоге процесса, например:

[Environment]::CurrentDirectory = $pwd
[IO.Path]::GetFullPath(".\xyz")
14
ответ дан 7 November 2019 в 10:40
поделиться

Вы можете просто установить -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 >
-1
ответ дан 7 November 2019 в 10:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: