从文件名中删除随机文本

remove random text from file name

我有一个装满文件的文件夹,文件名前面有一些文本。例如:

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

这应该可以解决问题。还有其他方法可以做到这一点,所以如果您找到另一种方法,请不要感到惊讶。

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_ 将满足 删除 [ing] 包括 _file 在内的所有字符的要求。由于您只想删除它,我们不提供替换字符串。

如果正则表达式不是你的朋友,你应该尝试和他热身。如果不是,一些老派的方法也同样有效。

$file = "blah_file_program.m"
$file.Substring($file.LastIndexOf("_") + 1)

program.m