Powershell - 通过删除最后几个字符重命名文件名

时间:2015-10-21 09:40:55

标签: powershell

我想删除多个文件名的最后11个字符。例如 我有这些文件名:

ABCDE_2015_10_20
HIJKL_2015_10_20
MNOPQ_2015_10_20
RSTUV_2015_10_20

想将它们重命名为

ABCDE
HIJKL
MNOPQ
RSTUV

我尝试过使用以下代码:

Get-ChildItem 'E:\Thomson Reuters\Stage' | rename-item -newname { [string]($_.name).substring($_.name.length -14) } 

有谁能告诉我哪里出错了?

3 个答案:

答案 0 :(得分:5)

你几乎就在那里,你只需告诉substring确切的起点和终点:

Get-ChildItem 'E:\Thomson Reuters\Stage' | rename-item -newname { $_.name.substring(0,$_.name.length-11) } 

通过将两个整数传递给substring,您可以为其指定要捕获的字符串的StartIndex和Length。 See here用于文档

答案 1 :(得分:5)

只需添加arco444的回复:

Get-ChildItem 'E:\Thomson Reuters\Stage' -filter *.txt | rename-item -NewName {$_.name.substring(0,$_.BaseName.length-6) + $_.Extension -replace "_"," "}

这将重命名目录中的所有.txt文件,删除文件名的最后6个字符,用空格替换文件名中的任何剩余下划线但仍保留文件扩展名。

因此,假设这些是文本文件,您会看到类似这样的内容:

ABCDE_2015_10_20.txt
HIJKL_2015_10_20.txt
MNOPQ_2015_10_20.txt
RSTUV_2015_10_20.txt

成为这个:

ABCDE 2015.txt
HIJKL 2015.txt
MNOPQ 2015.txt
RSTUV 2015.txt

答案 2 :(得分:1)

您要split在第一个下划线下的文件名

  • .split()方法或-split运算符与从零开始的索引[0]一起使用。
  • 重命名BaseName并保留Extension

Get-ChildItem 'E:\Thomson Reuters\Stage' |  
    Rename-Item -NewName { $_.BaseName.Split('_')[0] + $_.Extension }