PowerShell中如何更简洁地获取不带扩展名的文件完整路径?
更简洁的PowerShell获取无扩展名文件完整路径的方法
你可以用以下几种更简洁的方式实现,避免冗长的[Path]方法组合:
方法1:正则替换(最简洁)
直接通过正则匹配并移除最后一个扩展名部分:
$DestFilePath = "C:\Users\username\Desktop\Test Fonts\Helvetica Now Display Black.ttf" $FullPathNoExtension = $DestFilePath -replace '\.[^.]+$'
这个正则会精准匹配路径中最后一个.及其后面的所有字符(即文件扩展名),替换为空后直接得到目标路径,适合绝大多数常规文件路径场景。
方法2:利用文件对象属性(更严谨)
通过Get-Item获取文件对象,直接调用其内置属性组合路径:
$DestFilePath = "C:\Users\username\Desktop\Test Fonts\Helvetica Now Display Black.ttf" $fileItem = Get-Item $DestFilePath $FullPathNoExtension = Join-Path $fileItem.DirectoryName $fileItem.BaseName
BaseName属性本身就是不带扩展名的文件名,结合DirectoryName直接用Join-Path组合,逻辑清晰且能自动处理路径分隔符问题,同时兼容无扩展名的文件。
方法3:字符串截取(需额外判断)
通过字符串索引截取最后一个.之前的内容:
$DestFilePath = "C:\Users\username\Desktop\Test Fonts\Helvetica Now Display Black.ttf" if ($DestFilePath.LastIndexOf('.') -ge 0) { $FullPathNoExtension = $DestFilePath.Substring(0, $DestFilePath.LastIndexOf('.')) } else { $FullPathNoExtension = $DestFilePath }
这种方法需要先判断路径中是否存在.,避免无扩展名文件导致的报错,适合对性能要求较高且场景单一的情况。
内容的提问来源于stack exchange,提问作者fmotion1
相关产品推荐
相关产品推荐

