拆分文字路径以获取文件名

Split literal path to get file name

如何通过拆分路径从文字路径获取文件名? 为什么literalPath参数集没有-Leaf参数?

Split-Path -LiteralPath "D:\myDir\file.txt" -Leaf

file.txt 预计

这是一个不幸的错误 -LiteralPath 不适用于 -Leaf 等开关,至少在 PowerShell 7.2.4 之前 - 请参阅GitHub issue #8751.

但是,该错误是良性的,因为使用(可能位置隐含的)-Path 很好,因为 -Path[=65= 之间的通常区别](可能 wildcard-based paths) and -LiteralPath (verbatim paths) by default does not apply to the purely textual processing that Split-Path performs, as Santiago Squarzon 指出。

换句话说:以下应该按预期工作(隐含地将文件路径绑定到 -Path 参数,位置):

Split-Path "D:\myDir\file.txt" -Leaf # -> 'file.txt'

相反,这意味着 - 默认情况下 - Split-Path 不会 解析 wildcard-based 路径 - 发生纯文本拆分:

# NO wildcard resolution (matching), despite (implied) use of -Path
Split-Path "D:\myDir\*.txt" -Leaf   # -> '*.txt'

如果需要通配符解析,将(可能隐含的)-Path参数与-Resolve开关组合:

# Wildcard resolution (matching), due to use of -Resolve with (implied) -Path
Split-Path -Resolve "D:\myDir\*.txt" -Leaf   # -> 'foo.txt', 'bar.txt', ....

请注意 -Path-LiteralPath 之间的区别 在与 [=22= 结合使用时 重要 ]:

  • -Path-Resolve执行通配符解析使用完整路径用于拆分的匹配文件 and/or 个目录,如果有的话;如果没有匹配项,则无输出

  • -LiteralPath-Resolve 将逐字输入路径解析为完整路径 并使用完整路径进行拆分;如果路径不存在,则报告 non-terminating 错误