如何在PowerShell中基于相对路径或绝对路径获取绝对路径?

sk22

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

RepoBackup.ps1 -OutputDirectory .\out
RepoBackup.ps1 -OutputDirectory D:\backup

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

但:

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,接受绝对和相对输入,以及尚不存在的路径?

sk22

此功能为我完成了工作:

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 }
}
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)

它只是检查后一个路径是否是绝对路径,如果是绝对路径则返回它,否则它仅Join-Path$Path两者上运行$ChildPath请注意,这并不认为基准$Path是相对的,但是对于我的用例而言,这已经足够了。(我(Get-Item -Path './').FullName用作基本路径,无论如何都是绝对路径。)

Join-PathOrAbsolute .\ D:\    # => D:\
Join-PathOrAbsolute .\ .\out  # => .\.\out

请注意,虽然.\.\C:\code\.\out确实看起来很怪异,它是有效的,并解决的正确路径。Join-Path毕竟,这只是PowerShell集成功能的输出

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

超链接sql绝对路径

拷贝文件时如何获取拷贝的绝对路径?

一个字符串或脚本中命令的绝对路径变量和别名?

Spring Boot 中的绝对路径

如何在 Gradle 构建脚本中获取 android 输出文件夹(绝对路径)

在 CLI 中执行时,Symfony `url()` Twig 函数如何确定绝对路径?

通过绝对路径在Java中导入类

复制文件,然后打印到其最终目的地的绝对路径

如何获取文件的绝对路径

无法使用 CMake 变量 PROJECT_SOURCE_DIR 定义静态库的绝对路径

如何将包含 unix 环境变量的路径转换为 perl 中的绝对路径?

相对 Xpath 在 Maven TestNg 中不起作用,但绝对路径有效

os.path.abspath 不生成目录 python 的绝对路径

如何在 .jsx 文件中将绝对路径更改为相对路径。(Photoshop 扩展脚本)?

在java中获取绝对路径的最后一个元素是否更好?

如何让IIS尊重相对路径?

如何设置绝对路径?

如何使用Oracle(sqlplus)在另一个硬盘上使用文件的绝对路径?

如何使用 Angular 10 img 标签中的绝对路径在 nodejs 服务器中提供静态图像?

批处理文件删除绝对路径并在多个文件中只保留文件名

python在nuke中将路径转换为绝对路径

为什么盘符的绝对路径等于工作目录?

使用strchr在linux中查找绝对路径

文件的绝对路径无法正常工作python

不使用绝对路径用java创建文本文件

ASP.NET CORE 5 MVC 如何将绝对路径转换为相对路径?

如何让我的java项目在不使用绝对路径的情况下使用某些文件?

是否有可能使用绝对路径进行 htaccess 301 重定向?

如何为 npm run build 使用绝对路径

在Django中获取相对路径