我尝试使用PowerShell进行基于正则表达式的批量重命名。
这成功地只给了我需要的文件:
Get-ChildItem . | Where-Object { $_.Name -cmatch "(\b|_)(L|H|M|X{1,3})(_|\b)" }
(所有那些包含大写L,M,X,......)
接下来,我想重命名,即mycustom_M.png
至processed_M.png
,another_L.png
至processed_L.png
,依此类推。
基本上,我会使用正则表达式.*?(?:\b|_)(L|H|M|X{1,3})(?:_|\b).*
来选择名称,如果我在Notepad ++中,则使用processed_\1.png
替换它们,但我无法在PowerShell中使用它(I&I #39;我肯定错过了正确的语法):
[...] | Rename-Item -NewName { $_.Name -replace ".*?(?:\b|_)(L|H|M|X{1,3})(?:_|\b).*","banner_$Matches.groups[1].value" }
答案 0 :(得分:1)
PowerShell中的反向引用以$
开头,而不是\
。但是,您必须将替换表达式放在单引号中或转义$
,否则PowerShell会将$1
扩展为常规变量:
$pattern = ".*?(?:\b|_)(L|H|M|X{1,3})(?:_|\b).*"
... | Rename-Item -NewName { $_.Name -replace $pattern, 'banner_$1' }
或
$pattern = ".*?(?:\b|_)(L|H|M|X{1,3})(?:_|\b).*"
... | Rename-Item -NewName { $_.Name -replace $pattern, "banner_`$1" }