我想重命名文件:
Howard -((TV) )RED HEADED LEAGUE.mp4
更改为:
Howard - (TV) RED HEADED LEAGUE.mp4
由于 -Replace Powershell 命令使用 regex 正则表达式,因此我这样做来重命名文件:
Get-ChildItem | Rename-Item -NewName {$_.name -replace '\(\(TV\) \)',' \(TV\) '}
但是,输出此错误:
无法重命名指定的目标,因为它代表路径或设备名称。
并且按照谷歌的建议,用反引号转义括号,不会输出任何错误,但不会重命名任何文件:
Get-ChildItem | Rename-Item -NewName {$_.name -replace '`(`(TV`) `)',' `(TV`) '}
我怎样才能做到这一点?谢谢。
答案1
这有效:
Get-ChildItem | Rename-Item -NewName {$_.name -replace '\(\(TV\) \)',' (TV) '}
之所以有效,是因为第一个参数(搜索参数)'\(\(TV\) \)'
必须是 regex 正则表达式。因此,括号中需要转义字符。
但是,第二个参数(替换参数)' (TV) '
被视为纯文本字符串,而不是正则表达式。因此,无需转义括号,例如单引号除外。
答案2
有两种方法可以完成这项工作。[咧嘴笑]如果您有大量这样的替换,则正则表达式版本可能会更快。
第一个使用正则表达式将目标模式替换为替换模式。目标模式根据需要使用内置[regex]::Escape()
方法应用正则表达式转义。
第二种使用字符串.Replace()
方法来替换((
with(
和) )
with )
。
$InString = 'asf ((tv) ) qwe'
$Target = '((tv) )'
$Subst = ' (tv) '
$InString -replace [regex]::Escape($Target), $Subst
$InString.Replace('((', ' (').Replace(') )', ') ')
输出 ...
asf (tv) qwe
asf (tv) qwe