代码之家  ›  专栏  ›  技术社区  ›  Ahmed Karmous

仅替换文件名中第一个出现的字符

  •  2
  • Ahmed Karmous  · 技术社区  · 9 年前

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

    aabbc.txt
    aaabbxx.txt
    aacbbbv.txt
    

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

    aazbc.txt
    aaazbxx.txt
    aaczbbv.txt
    

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

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

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

    1 回复  |  直到 9 年前
        1
  •  5
  •   Ansgar Wiechers    9 年前

    这样的方法应该有效:

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

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