仅替换文件名中首次出现的字符
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 ((.*?)
),并通过将其替换为自身 (
) 将其保留在替换中。
我有一个包含很多文件的文件夹。我想要的是替换每个文件的第一个匹配字符。例如我有
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 ((.*?)
),并通过将其替换为自身 () 将其保留在替换中。