有括号时重命名项目失败(regex/escaping 问题)

Rename-Item fails when there are brackets (regex/escaping issue)

我只是想使用 PowerShell 重命名文件,但是下面的脚本在有括号时不起作用:

$old = [regex] '_Jackson\(UK\)_'
$new = [regex] '_Jackson\(US\)_'
get-childitem "K:\CustomerVideos" -include @("*.webm","*.mp4","*.mkv") -recurse | foreach-object { rename-item $_ -newname ( $_.name -creplace $old,$new ) }

重命名项目:无法重命名,因为指定的目标表示路径或设备名称。

当 $old 和 $new 不包含括号时它确实有效,所以我猜这是一个转义问题,但我已经在使用反斜杠了……有什么问题吗?谢谢。

因为正则表达式 替换 语法大大简化(字符 类、分组、反向引用等都被禁用,因为它们只有在 matching),包括反斜杠只会混淆事情。具体来说,它在最终字符串中保留了反斜杠和 "escaped" 字符。这是因为 [regex] 对象实际上不能用作替换字符串,所以它们必须首先通过 ToString() 自动转换为字符串,returns 原始模式。

仅使用字符串作为替换模式。