PowerShell重命名多个文件,文件名的特定部分

roo*_*oot 5 powershell

我正在尝试重命名文件名以相同方式结尾的多个文件。这些文件目前是:“Foo Bar (U) (V7.9) (USA).txt”“Few Ber Doo Ber (U) (V7.9) (USA).txt”等

我正在尝试删除名称的“(U) (V7.9) (USA)”部分并将此部分替换为 (USA)。这些文件将被命名为:“Foo Bar (USA).txt”“Few Ber Doo Ber (USA).txt”

我不能完全让它工作,但这是我一直试图无济于事的:

get-childItem '* (U) (V7.9) (USA).txt' | rename-item -newname { $_.name -replace '(U) (V7.9) (USA)','(USA)' }
Run Code Online (Sandbox Code Playgroud)

Ant*_*ace 7

您尝试替换的几个字符是正则表达式中的特殊字符。它们具有特殊的、保留的含义,允许您在它们不被“转义”时创建复杂的表达式。为了转义它们,您只需要在特殊字符前面包含一个反斜杠。例子:

PS C:\> $string = "(U) (V7.9) (USA)"

#Failure
PS C:\> $string -replace "(U) (V7.9) (USA)", "(USA)"
(U) (V7.9) (USA)

#Success
PS C:\> $string -replace "\(U\) \(V7\.9\) \(USA\)", "(USA)"
(USA)
Run Code Online (Sandbox Code Playgroud)

这是一个Powershell Regex 参考,以防您遇到类似问题。您可能会注意到使用反引号 ` 字符而不是反斜杠——反引号是 powershell 中的转义字符,但对于 .NET 中的所有正则表达式处理(Powershell 构建在其上)并非如此。因此,您可能会在 Internet 上的 powershell 正则表达式示例中看到两者都使用。