如何使用Windows PowerShell清理(重命名)文件名而不更改文件扩展名?

时间:2015-07-23 13:18:04

标签: windows powershell scripting filenames renaming

在这里稍微类似的问题上,我发现了一个powershell脚本的例子,它重命名或更好地“替换了许多文件名中的字符串”。但这也可能发生在文件扩展本身,这是不好的。

那么我怎样才能改变这个例子,以便它仍然重命名文件名,但保持文件扩展不变?

这是用下划线替换文件名中所有点的示例:

Dir | Rename-Item -NewName { $_.Name -replace "\.","_" }

问题是:如何解决它也没有替换最后一个点(文件扩展名)?

2 个答案:

答案 0 :(得分:3)

您可以使用Basename属性访问文件名减去扩展名,以便合并如下:

Get-ChildItem | Rename-Item -NewName { "$($_.BaseName -replace '\.','_')$($_.Extension)" }

答案 1 :(得分:0)

感谢。但碰巧我刚刚找到了我最喜欢的this solution here on stackoverflow,因为它整洁且容易理解

dir | Rename-Item -NewName { $_.BaseName.replace(".","_") + $_.Extension }

而且好处是,只需稍加修改就可以立即清除其他文件名内容。像这样:

dir | Rename-Item -NewName { $_.BaseName.replace(".","_").replace("nastyKeyword1","").replace("nastyKeyword2","") + $_.Extension }

PS: 我从Powershell replacing periods提取了我的解决方案并将其修改为我的需求。我不认为这个问题应该作为一个骗局被关闭,因为我认为问题或问题并不完全相同,而是一个变体。但如果它违反了规则,那么我就可以了。去吧。