如何使用Windows PowerShell的正则expression式删除一个文件名末尾的一个或多个空格?

我有一个目录包含了很多文件格式错误的文件名。 其中一些在文件名末尾有“空格”。 其他人在文件名string的末尾有一些在文件名中网格化的关键字。 例如“xxx xxx xxx somewordEng .txt”

即时通讯试图摆脱他们使用这个脚本,但它不会做。 文件名(基本名称)末尾的空格仍然存在,“Eng”关键字也是以前添加到该单词中的:

dir | Rename-Item -NewName { $_.BaseName.replace("Eng$","").replace(" {2,}"," ").replace("\s$","") + $_.Extension } .replace("Eng$","") is supposed to remove the "Eng" keyword if it appears at the END of the filename (basename), seems not working so far. .replace(" {2,}"," ") is supposed to replace 2 or more following spaces with just ONE space within the filename, seems not working so far. .replace("\s$","") is supposed to remove spaces at the end of the filename, does not work neither. 

我search了PowerShell的正则expression式的例子,但似乎没有任何工作到目前为止。 :(不能看到问题呢。

Solutions Collecting From Web of "如何使用Windows PowerShell的正则expression式删除一个文件名末尾的一个或多个空格?"

你在这里遇到的问题是字符串方法.Replace()不支持正则表达式,这是你在这里要做的。 您应该使用替换运算符替代。 这两个选项之间的差异在这个答案中多了一点

以下两个例子显示了这种差异

 PS C:\Users\mcameron> "Te.t".Replace(".","s") Test PS C:\Users\mcameron> "Te.t" -Replace ".","s" ssss 

在你的情况

 $_.BaseName -replace "Eng$" -replace " {2,}"," " -replace "\s$" 

我们使用正确的操作符,您仍然可以像上面所看到的那样“链接”它们。 这将删除尾随单词“英”和任何尾随单个空白。 以及将一组空白减少到单个空间。 另外,如果你没有替换,那么你可以省略第二个参数。

不过,如果你想要的话,你可以把这些加在一起。

 $_.BaseName -replace "(Eng|\s+)$" -replace "\s{2,}"," "