在 Powershell 的 -Replace 参数中转义括号不起作用

Escaping a parenthesis in Powershell's -Replace parameter not working

我想重命名这个文件:

Howard -((TV) )RED HEADED LEAGUE.mp4

为此:

Howard - (TV) RED HEADED LEAGUE.mp4

因为 -Replace Powershell 命令需要 regex 正则表达式,所以我这样做是为了重命名文件:

Get-ChildItem | Rename-Item -NewName {$_.name -replace '\(\(TV\) \)',' \(TV\) '}

但是,输出这个错误:

Cannot rename the specified target, because it represents a path or device name.

并用反引号转义圆括号,正如 google 所建议的那样,输出没有错误但没有文件被重命名:

Get-ChildItem | Rename-Item -NewName {$_.name -replace '`(`(TV`) `)',' `(TV`) '}

我怎样才能完成这项工作?谢谢。

如评论中所述,替换字符串(-replace 的第二个右侧参数)不需要转义!

替代品逐字放置在字符串中,因此您的示例中生成的文件名变为 Howard - \(TV\) RED HEADED LEAGUE.mp4 - 这就是文件系统抱怨的原因,\ 不是有效的文件名字符。

如果你只是这样做:

{$_.Name -replace '\(\(TV\) \)',' (TV) '}

...它会起作用 :)