从文件名中删除随机文本
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
我有一个装满文件的文件夹,文件名前面有一些文本。例如:
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