如何通过Split-Path从LiteralPath字面路径中提取文件名
问题原因
你碰到的-LiteralPath和-Leaf参数无法组合使用的报错,是Windows PowerShell 5.1及更早版本的参数集设计缺陷:这类旧版本中,-Leaf、-Parent、-Qualifier这类指定返回路径片段的开关参数,仅被划分到支持通配符解析的默认-Path参数集,没有纳入按字面量解析、不处理通配符的-LiteralPath参数集,直接同时调用两个参数就会触发参数匹配错误。
该缺陷在PowerShell Core 6.0及后续所有7.x版本中已经修复,在新版本环境下直接执行你编写的命令:
Split-Path -LiteralPath "D:\myDir\file.txt" -Leaf
即可正常返回预期结果file.txt。
全版本兼容的字面路径获取文件名方案
如果需要在Windows PowerShell 5.1等旧版本环境实现需求,以下两种方法都可以稳定按字面量解析路径、返回正确的文件名:
- 方法1:通过管道传递路径
通过管道传入路径时,PowerShell会自动按LiteralPath模式绑定参数,不会触发参数集冲突:"D:\myDir\file.txt" | Split-Path -Leaf - 方法2:直接读取文件对象的Name属性
先用Get-Item按字面量规则获取路径对应的文件系统对象,直接读取其自带的Name属性即可,完全不依赖Split-Path的参数集逻辑,哪怕路径中包含[、]这类会被通配符规则识别的特殊字符,也不会出现解析错误:(Get-Item -LiteralPath "D:\myDir\file.txt").Name
内容的提问来源于stack exchange,提问作者Lexxy
相关产品推荐
相关产品推荐

