【问题标题】:PowerShell File Rename with Padded Zeroes After First Delimeter在第一个分隔符后使用填充零重命名 PowerShell 文件
【发布时间】:2021-10-27 17:56:24
【问题描述】:

我有一系列要重命名的文件。我想在第一次出现“-”分隔符后用填充零重命名文件,如下例所示:

旧名称: 101-1_File1_Project1-000-END.txt
所需的新名称: 101-001_File1_Project1-000-END.txt

我的 PowerShell 代码几乎可以工作,除了它将填充应用于所有“-”实例而不仅仅是第一个实例。我已经尝试了一百万件事,但没有任何效果。请帮忙!

下面的PowerShell:

gci "C:\Path\Folder-with-Files" | ren -n {[regex]::replace($_.basename, '\-', {"$args".PadRight(3, '0')})+ $_.extension}

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    您可以使用lookbehind:

    gci "C:\Path\Folder-with-Files" | ren -n {[regex]::replace($_.basename, '(?<=^[^-]*)-', {"$args".PadRight(3, '0')})+ $_.extension}
    

    (?&lt;=^[^-]*)- 正则表达式将匹配前面紧跟字符串开头 (^) 的 -,然后是除连字符以外的零个或多个字符。

    请参阅.NET regex demo

    【讨论】:

    • 非常感谢 - 我正在摆弄后面的外观,但无法正确处理。
    • 你知道为什么 {"$args".PadRight(3, '0')}) 在这种情况下不适用于以 101-11 开头的文件名,而实际上改为 101-0011 101-011 和我期望的一样吗?
    • @LBro:您的真正意图不是应用 right-zero-padding 到第一个 - 实例,而是应用 left- 第一个 - 后面的数字 补零 - 请参阅 this answer 到您的后续问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2019-03-23
    • 2014-07-27
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2015-11-18
    相关资源
    最近更新 更多