我想删除多个文件名的最后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) }
有谁能告诉我哪里出错了?
答案 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 }