仅替换文件名中首次出现的字符

Replace only first occurence of a character in filenames

我有一个包含很多文件的文件夹。我想要的是替换每个文件的第一个匹配字符。例如我有

aabbc.txt
aaabbxx.txt
aacbbbv.txt

我想用 "z" 替换第一个 "b" 结果将是

aazbc.txt
aaazbxx.txt
aaczbbv.txt

所以只有第一场比赛会被替换我试过的是

Dir | Rename-Item -NewName { $_.name -replace "b","a" }

但它替换了文件名中的所有 "b"。

像这样的东西应该可以工作:

Dir | Rename-Item -NewName { $_.name -replace '^(.*?)b', 'z' }

诀窍是在匹配模式中包括最短匹配到第一个 b ((.*?)),并通过将其替换为自身 () 将其保留在替换中。