【发布时间】:2019-03-18 23:13:02
【问题描述】:
我有几个 PDF 文件,它们的文件名中包含需要删除的文本。每个文件名都有几个下划线,具体取决于文件名的长度。我的目标是删除存在于.pdf 文件扩展名和最后一个_ 之间的文本。
例如我有:
- AB_NAME_NAME_NAME_NAME_DS_123_EN_6.pdf
- AC_NAME_NAME_NAME_DS_321_EN_10.pdf
- AD_NAME_NAME_DS_321_EN_101.pdf
并希望将粗体部分删除成为:
- AB_NAME_NAME_NAME_NAME_DS_123_EN.pdf
- AC_NAME_NAME_NAME_DS_321_EN.pdf
- AD_NAME_NAME_DS_321_EN.pdf
我是 powershell 的新手,但我做了一些研究,发现 Powershell - Rename filename by removing the last few characters 问题很有帮助,但它并不能完全满足我的需要,因为我无法硬编码要删除的字符的长度,因为它们的长度可能不同(2 -4)
Get-ChildItem 'C:\Path\here' -filter *.pdf | rename-item -NewName {$_.name.substring(0,$_.BaseName.length-3) + $_.Extension}
似乎可以使用.split 或regex 来执行此操作,但我找不到解决方案。谢谢。
【问题讨论】:
-
试试
$_.BaseName.substring(0,$_.BaseName.lastindexof('_')) -
或
$_.Name -replace '(_[a-z0-9]+)(?=\.pdf)' -
@TheMadTechnician 就是这样!这说得通。来吧,把你的答案写下来,这样你就可以得到分数。我最终得到了
{ $_.BaseName.substring(0,$_.BaseName.lastindexof('_')) + $_.Extension } -
@Olaf 你的正则表达式版本去掉了
.pdf文件扩展名(除非我执行不正确?) -
@crazymatt,它在这里按预期工作。
标签: powershell