我有一个文件夹,里面有文件名前面有一些文字。例如:
program1.m
已成为John Smith 23423_file_program1.m
program2.m
已成为Jane Doe 235_file_program2.m
。
前缀的字符数不一致,但子字符串file_
始终是我想删除的最后一组字符。无论如何要删除包含file_
所有文件的文件夹中的所有字符?这是我的尝试,但正如预期*
在这种情况下不起作用:
get-childitem *.m | foreach { rename-item $_ $_.Name.Replace("*file_","") }
答案 0 :(得分:2)
这应该可以解决问题。还有其他方法可以做到这一点,所以如果你找到另一个,不要感到惊讶。
get-childitem *.m -Filter *.m | ForEach{
Rename-Item -Path $_.FullName -NewName ($_.Name -replace ".*file_")
}
或更短
get-childitem -Filter *.m | Rename-Item -NewName {$_.Name -replace ".*file_"}
你有正确的想法,但你遇到的问题是字符串.replace()
方法正在寻找匹配静态字符串而不使用通配符。你有它的方式,它期望一个星号出现在字符串中,而不是。
相反,我们使用支持正则表达式的-replace
。 .*file_
将满足删除所有字符(包括_file )的要求。由于您只是想删除它,我们不提供替换字符串。
如果正则表达式不是你的朋友,你应该尝试热身给他。如果不是,一些旧学校的方法也可以。
$file = "blah_file_program.m"
$file.Substring($file.LastIndexOf("_") + 1)
program.m