PowerShell中移除数组元素扩展名:如何获取无后缀文件名
解决PowerShell中去除文件名扩展名的需求
嘿,这个需求在PowerShell里有几种简洁靠谱的实现方式,我分场景给你说明:
示例场景快速处理
针对你给出的$testing = @("a.txt", "b.txt"),要得到仅包含a、b的数组,可以用.NET的GetFileNameWithoutExtension方法,它能可靠地剥离任何文件扩展名:
$testingWithoutExt = $testing | ForEach-Object { [System.IO.Path]::GetFileNameWithoutExtension($_) } # 输出结果:a, b
实际业务场景优化方案
你的业务场景里是通过Get-ChildItem获取.dtsx文件,其实不用先拿到带扩展名的文件名再处理——PowerShell的FileInfo对象本身就有BaseName属性,直接就是不带扩展名的文件名,这样写更高效:
$PackageNames = Get-ChildItem ("$DestinationPath\$ProjectName" + "_2105\$ProjectName") -Filter *.dtsx | Select-Object -ExpandProperty BaseName
执行完这个命令,$PackageNames直接就是你需要的、去除了.dtsx扩展名的文件名数组。
备选方案:正则替换(适合已存在带扩展名数组的情况)
如果已经拿到了带.dtsx扩展名的数组(比如你当前的$PackageNames变量),也可以用正则表达式替换掉结尾的.dtsx:
$PackageNamesWithoutExt = $PackageNames | ForEach-Object { $_ -replace '\.dtsx$', '' }
这里的正则\.dtsx$确保只替换字符串末尾的.dtsx,避免误匹配文件名中间出现的类似字符。
推荐优先用BaseName的方式,因为它直接利用Get-ChildItem返回的对象属性,代码更简洁,也不会出现正则可能的匹配错误。
内容的提问来源于stack exchange,提问作者xhr489
相关产品推荐
相关产品推荐

