我正在尝试替换文件名中的字符串。字符串始终以“-”开头,以“ _”结尾。中间可以是数字,文本或两者都可以。
我已经成功地将“-”更改为“”,但是正则表达式正在杀死我。我是一个完整的初学者,所以整个代码都被其他文章拼凑了。
Model Form
目标
A121000-22_01.jpg-> A121000_01.jpg
A478BFE-876_02.jpg-> A478BFE_02.jpg
A124568-59B_03.jpg-> A124568_03.jpg
结果没有改变。
答案 0 :(得分:1)
您现有的正则表达式非常接近。无需替换为_
。
您可以将惰性量词(.*?)
更改为字符异常类[^_]*
,如here所示。
-[^_]*
此匹配项:
-
从字面上看是这个字符。[^_]*
除_
以外的任何字符任意次数(一旦到达_
,此字符便停止。)如果需要确保存在_
字符,则可以使用以下内容代替here(注意,最后一行不匹配)。
-[^_]*(?=_)
此匹配项:
-
从字面上看是这个字符。[^_]*
除_
以外的任何字符任意次数(一旦到达_
,此字符便停止。)(?=_)
确保以下字符从字面上是_
我将您的代码更改为以下代码,并且对我有用(将-Filter "*$a*"
替换为-Include "*.jpg"
):
$baseDirectory = "C:\test\Rename"
$a = "-[^_]*(?=_)"
Pushd $baseDirectory
Get-ChildItem -Include "*.jpg" -Recurse|
Rename-Item -NewName {$_.Name -replace $a,""} -ErrorAction SilentlyContinue
PopD