当有括号时,重命名项失败(正则表达式/转义问题)

时间:2015-03-02 03:49:07

标签: regex windows powershell powershell-v2.0

我只是尝试使用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不包含括号时它确实有效,所以我猜它是一个逃避问题,但我已经使用了反斜杠......出了什么问题?谢谢。

1 个答案:

答案 0 :(得分:2)

因为regex 替换语法被大大简化(字符类,分组,反向引用等等都被禁用,因为它们只有在匹配时才有用) ,包括反斜杠只会混淆事物。具体来说,它留下反斜杠和"逃脱"最后一个字符串中的字符。这是因为[regex]对象实际上不能用作替换字符串,所以它们必须首先通过ToString()自动转换为字符串,这将返回原始模式。

只使用字符串替换模式。