首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据PowerShell中的相对路径或绝对路径获取绝对路径?

如何根据PowerShell中的相对路径或绝对路径获取绝对路径?
EN

Stack Overflow用户
提问于 2020-12-01 15:37:42
回答 1查看 59关注 0票数 1

考虑以下情况:我有一个参数或配置变量,用于设置脚本的输出目录。显然,这个参数也应该能够是绝对的:

代码语言:javascript
运行
复制
RepoBackup.ps1 -OutputDirectory .\out
RepoBackup.ps1 -OutputDirectory D:\backup

在脚本中,我结合使用(Get-Item -Path './').FullNameJoin-Path来确定输出目录的绝对路径,因为我可能需要使用Set-Location来更改当前目录-这使得使用相对路径变得复杂。

但是:

代码语言:javascript
运行
复制
Join-Path C:\code\ .\out  # => C:\code\.\out  (which is exactly what i need)
Join-Path C:\code\ D:\    # => C:\code\D:\    (which is not only not what i need, but invalid)

我考虑过使用Resolve-Path并执行类似Resolve-Path D:\backup的操作,但如果该目录不存在(目前还不存在),则会产生无法找到路径的错误。

那么,如何获得$OutputDirectory的绝对路径,同时接受绝对和相对输入,以及尚不存在的路径呢?

EN

Stack Overflow用户

回答已采纳

发布于 2020-12-01 17:15:00

这个函数为我完成了这项工作:

代码语言:javascript
运行
复制
function Join-PathOrAbsolute ($Path, $ChildPath) {
    if (Split-Path $ChildPath -IsAbsolute) {
        Write-Verbose ("Not joining '$Path' with '$ChildPath'; " +
            "returning the child path as it is absolute.")
        $ChildPath
    } else {
        Write-Verbose ("Joining path '$Path' with '$ChildPath', " +
            "child path is not absolute")
        Join-Path $Path $ChildPath
    }
}

# short version, without verbose messages:

function Join-PathOrAbsolute ($Path, $ChildPath) {
  if (Split-Path $ChildPath -IsAbsolute) { $ChildPath }
  else { Join-Path $Path $ChildPath }
}
代码语言:javascript
运行
复制
Join-PathOrAbsolute C:\code .\out  # => C:\code\.\out (just the Join-Path output)
Join-PathOrAbsolute C:\code\ D:\   # => D:\ (just the $ChildPath as it is absolute)

它只检查后一个路径是否是绝对路径,如果是,就返回它,否则它只在$Path$ChildPath上运行Join-Path。请注意,这并没有将基础$Path视为相对的,但对于我的用例来说,这已经足够了。(我使用(Get-Item -Path './').FullName作为基本路径,这无论如何都是绝对的。)

代码语言:javascript
运行
复制
Join-PathOrAbsolute .\ D:\    # => D:\
Join-PathOrAbsolute .\ .\out  # => .\.\out

请注意,虽然.\.\C:\code\.\out看起来确实很奇怪,但它是有效的,并且可以解析为正确的路径。毕竟,这只是PowerShell集成的Join-Path函数的输出。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65086428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档