从文件名中删除随机文本

时间:2015-05-29 19:11:27

标签: powershell rename

我有一个文件夹,里面有文件名前面有一些文字。例如:

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_","") }

1 个答案:

答案 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