gpt4 book ai didi

powershell - 将相对路径转换为绝对字符串路径

转载 作者:行者123 更新时间:2023-12-05 03:33:02 24 4
gpt4 key购买 nike

我需要将相对路径存储为文件中的绝对路径。我已经尝试了很多事情,包括:

$path = (resolve-path -path "C:\Folder\..\Folder2").Path.ToString()

Add-content "d:\textfile.txt" $path

留下一个空文件。所以我很难过。

最佳答案

解析相对和/或非规范化路径的最简单方法(一个包含诸如...) 到一个规范化的完整路径,直接作为一个字符串,是到使用 Convert-Path cmdlet:

Convert-Path -LiteralPath "C:\Folder\..\Folder2"

在您的命令的上下文中(注意 Add-Content appends 到预先存在的目标文件;要仅写入给定的内容,请使用 Set-Content ):

Add-Content "d:\textfile.txt" (Convert-Path -LiteralPath "C:\Folder\..\Folder2")

注意:

  • 不同于Resolve-Path , Convert-Path 返回一个 file-system-native 路径,这通常是可取的。

    • 这意味着基于 PowerShell-only 驱动器(使用 New-PSDrive 创建)的文件系统路径被解析为底层本地文件系统位置,正如外部流程所理解的那样。 (例如,如果 MyDrive: 映射到 C:\ProjectsConvert-Path -LiteralPath MyDrive:\Foo 返回 C:\Projects\Foo)
  • Resolve-Path一样,Convert-Path 要求路径所指的项目存在 - 这是一个不幸的限制,在 GitHub issue #2993 中讨论.


如果输入路径指向一个不存在的文件或目录:

.NET 提供 [System.IO.Path]::GetFullPath()方法,它也为不存在的路径提供相同的功能。

挑战在于相对路径被解析为 .NET 的当前(工作)目录,通常不同于 PowerShell 的 - 参见 this answer获取更多信息。

PowerShell (Core) 7+ 中,您可以通过明确地指定引用路径(解析相对路径)来解决此问题 em>:

# Note: The 'System.' prefix in the type literal is optional.
[IO.Path]::GetFullPath("C:\Folder\..\Folder2", $PWD.ProviderPath)

automatic $PWD variable指 PowerShell 的当前位置(目录)。请注意 .ProviderPath 的使用,它再次确保使用 file-system-native 路径。为了获得最大的稳健性 - 再次防止当前 PowerShell 位置不是文件系统位置的情况 - 使用 (Get-Location -PSProvider FileSystem).ProviderPath

Windows PowerShell 中,如果此方法重载不可用,则需要更麻烦的方法,如 Theo 所建议的那样:

# Note: If you don't need to *normalize* the path (resolving . and .. components), 
# the [IO.Path]::Combine() call alone is enough.
[IO.Path]::GetFullPath(
[IO.Path]::Combine($PWD.ProviderPath, "C:\Folder\..\Folder2")
)
  • [IO.Path]::Combine() 有条件地将给定的第一个路径与第二个路径结合起来,如果后者是相对的 - 否则,后者按原样使用。

  • [IO.Path]::GetFullPath() 然后确保生成的完整路径的规范化(解析任何.. 组件);如果不需要,只需调用 [IO.Path]::Combine() 即可。

关于powershell - 将相对路径转换为绝对字符串路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70390985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com