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

Ahm*_*ous 2 powershell file-rename batch-rename

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

aabbc.txt
aaabbxx.txt
aacbbbv.txt
Run Code Online (Sandbox Code Playgroud)

我想用“ z”替换第一个“ b”,结果将是

aazbc.txt
aaazbxx.txt
aaczbbv.txt
Run Code Online (Sandbox Code Playgroud)

所以只有第一个比赛会被替换

Dir | Rename-Item -NewName { $_.name -replace "b","a" }
Run Code Online (Sandbox Code Playgroud)

但它将替换文件名中的所有“ b”。

Ans*_*ers 5

这样的事情应该起作用:

Dir | Rename-Item -NewName { $_.name -replace '^(.*?)b', '$1z' }
Run Code Online (Sandbox Code Playgroud)

诀窍是(.*?)在匹配模式中包括最短的匹配项,直到第一个b(),并通过用自身($1)替换来保留替换项。