如何使用windows powershell在不更改文件扩展名的情况下清理(重命名)文件名?

如何使用windows powershell在不更改文件扩展名的情况下清理(重命名)文件名?,windows,powershell,scripting,filenames,renaming,Windows,Powershell,Scripting,Filenames,Renaming,在这里的一个稍微类似的问题上,我发现了一个powershell脚本示例,它可以在多个文件名中同时重命名或更好地“替换字符”。但这也可能发生在文件扩展名本身,这是不好的 那么,如何转换这个示例,使其仍然重命名文件名,但保持文件扩展名不变 以下是用下划线替换文件名中所有点的示例: Dir | Rename-Item -NewName { $_.Name -replace "\.","_" } 问题是:如何修复它不替换最后一个点(文件扩展名)?您可以使用Basename属性访问文件名减去扩展名,因此

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

那么,如何转换这个示例,使其仍然重命名文件名,但保持文件扩展名不变

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

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

问题是:如何修复它不替换最后一个点(文件扩展名)?

您可以使用
Basename
属性访问文件名减去扩展名,因此可以按如下方式组合:

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

您可以使用
Basename
属性访问文件名减去扩展名,因此可以按如下方式组合:

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

您可以使用
Basename
属性访问文件名减去扩展名,因此可以按如下方式组合:

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

您可以使用
Basename
属性访问文件名减去扩展名,因此可以按如下方式组合:

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

谢谢。但碰巧我发现我最喜欢它,因为它整洁易懂

dir | Rename-Item -NewName { $_.BaseName.replace(".","_") + $_.Extension }
好的是,它可以用来清理额外的文件名内容,只需稍加修改。像这样:

dir | Rename-Item -NewName { $_.BaseName.replace(".","_").replace("nastyKeyword1","").replace("nastyKeyword2","") + $_.Extension }
附言:
我从中提取解决方案,并根据自己的需要进行修改。我不认为这个问题应该被当作一个骗局来解决,因为我认为这个问题不是完全相同的,而是一个变体。但是如果它违反了规则,那么我可以接受。去做吧

谢谢。但碰巧我发现我最喜欢它,因为它整洁易懂

dir | Rename-Item -NewName { $_.BaseName.replace(".","_") + $_.Extension }
好的是,它可以用来清理额外的文件名内容,只需稍加修改。像这样:

dir | Rename-Item -NewName { $_.BaseName.replace(".","_").replace("nastyKeyword1","").replace("nastyKeyword2","") + $_.Extension }
附言:
我从中提取解决方案,并根据自己的需要进行修改。我不认为这个问题应该被当作一个骗局来解决,因为我认为这个问题不是完全相同的,而是一个变体。但是如果它违反了规则,那么我可以接受。去做吧

谢谢。但碰巧我发现我最喜欢它,因为它整洁易懂

dir | Rename-Item -NewName { $_.BaseName.replace(".","_") + $_.Extension }
好的是,它可以用来清理额外的文件名内容,只需稍加修改。像这样:

dir | Rename-Item -NewName { $_.BaseName.replace(".","_").replace("nastyKeyword1","").replace("nastyKeyword2","") + $_.Extension }
附言:
我从中提取解决方案,并根据自己的需要进行修改。我不认为这个问题应该被当作一个骗局来解决,因为我认为这个问题不是完全相同的,而是一个变体。但是如果它违反了规则,那么我可以接受。去做吧

谢谢。但碰巧我发现我最喜欢它,因为它整洁易懂

dir | Rename-Item -NewName { $_.BaseName.replace(".","_") + $_.Extension }
好的是,它可以用来清理额外的文件名内容,只需稍加修改。像这样:

dir | Rename-Item -NewName { $_.BaseName.replace(".","_").replace("nastyKeyword1","").replace("nastyKeyword2","") + $_.Extension }
附言:
我从中提取解决方案,并根据自己的需要进行修改。我不认为这个问题应该被当作一个骗局来解决,因为我认为这个问题不是完全相同的,而是一个变体。但是如果它违反了规则,那么我可以接受。去做吧

很高兴您找到了答案,但您至少应该在答案中包含一个指向您找到的解决方案的链接。同时考虑把你原来的问题作为一个重复,我把我的解决方案从我的需求中修改出来。我不认为这个问题应该被当作一个骗局来解决,因为我认为这个问题不是完全相同的,而是一个变体。但是如果它违反了规则,那么我可以接受。去争取吧PS:无法编辑我的问题,因此我必须将链接信息放在这里:/没问题,我帮你做了编辑。我得说,他们几乎是同一个问题。如果社区中有足够多的人同意,它将作为复制品关闭,但在其他情况下将保持打开状态。很高兴您找到了答案,但您至少应该在答案中包含一个指向您找到的解决方案的链接。同时考虑把你原来的问题作为一个重复,我把我的解决方案从我的需求中修改出来。我不认为这个问题应该被当作一个骗局来解决,因为我认为这个问题不是完全相同的,而是一个变体。但是如果它违反了规则,那么我可以接受。去争取吧PS:无法编辑我的问题,因此我必须将链接信息放在这里:/没问题,我帮你做了编辑。我得说,他们几乎是同一个问题。如果社区中有足够多的人同意,它将作为复制品关闭,但在其他情况下将保持打开状态。很高兴您找到了答案,但您至少应该在答案中包含一个指向您找到的解决方案的链接。同时考虑把你原来的问题作为一个重复,我把我的解决方案从我的需求中修改出来。我不认为这个问题应该被当作一个骗局来解决,因为我认为这个问题不是完全相同的,而是一个变体。但是如果它违反了规则,那么我可以接受。去争取吧PS:无法编辑我的问题,因此我必须将链接信息放在这里:/没问题,我帮你做了编辑。我得说,他们几乎是同一个问题。如果社区中有足够多的人同意,它将作为复制品关闭,但在其他情况下将保持打开状态。很高兴您找到了答案,但您至少应该在答案中包含一个指向您找到的解决方案的链接。同时考虑把你原来的问题作为一个重复,我把我的解决方案从我的需求中修改出来。我不认为这个问题应该被当作一个骗局来解决,因为我认为这个问题不是完全相同的,而是一个变体。但是如果它违反了规则,那么我可以接受。去争取吧PS:无法编辑我的问题,因此我必须将链接信息放在这里:/没问题,我帮你做了编辑。我得说,他们几乎是同一个问题。如果社区中有足够多的人同意,它将作为一个傻瓜关闭,但在其他情况下将保持开放。