Ответ 1
[System.IO.Path]
использует текущую директорию процесса оболочки. Вы можете получить абсолютный путь с помощью командлета Resolve-Path
:
Resolve-Path .\foo.txt
Я ожидаю, что этот маленький powershell один лайнер повторит полный путь к файлу foo.txt, где каталог является моим текущим каталогом.
[System.IO.Path]::GetFullPath(".\foo.txt")
Но это не так. Он печатает...
C:\Documents and Settings\Administrator\foo.txt
Я не в директории $home. Почему он разрешается там?
[System.IO.Path]
использует текущую директорию процесса оболочки. Вы можете получить абсолютный путь с помощью командлета Resolve-Path
:
Resolve-Path .\foo.txt
В соответствии с документацией для GetFullPath она использует текущий рабочий каталог для разрешения абсолютного пути. Рабочий каталог powershell не совпадает с текущим местоположением:
PS C:\> [System.IO.Directory]::GetCurrentDirectory()
C:\Documents and Settings\user
PS C:\> get-location
Path
----
C:\
Я полагаю, вы могли бы использовать SetCurrentDirectory, чтобы они соответствовали:
PS C:\> [System.IO.Directory]::SetCurrentDirectory($(get-location))
PS C:\> [System.IO.Path]::GetFullPath(".\foo.txt")
C:\foo.txt