我只是尝试使用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不包含括号时它确实有效,所以我猜它是一个逃避问题,但我已经使用了反斜杠......出了什么问题?谢谢。
答案 0 :(得分:2)
因为regex 替换语法被大大简化(字符类,分组,反向引用等等都被禁用,因为它们只有在匹配时才有用) ,包括反斜杠只会混淆事物。具体来说,它留下反斜杠和"逃脱"最后一个字符串中的字符。这是因为[regex]
对象实际上不能用作替换字符串,所以它们必须首先通过ToString()
自动转换为字符串,这将返回原始模式。
只使用字符串替换模式。