You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 10:32:33