我有一系列要重命名的文件。我想在第一次出现“-”分隔符后用填充的零(总共 3 个字符)重命名文件,如下例所示:
旧名称示例 1: 101-1_File1_Project1-000-END.txt
所需的新名称示例 1: 101-001_File1_Project1-000-END.txt
旧名称示例 2:101-28_File1_Project1-000-END.txt
所需的新名称示例 2: 101-028_File1_Project1-000-END.txt
下面的 PowerShell 代码适用于示例 1,但不适用于示例 2。对于示例 2,结果为:
101-0028_File1_Project1-000-END.txt
我认为这种情况正是 PadRight 应该处理的情况,即“-”右侧不超过 3 个字符。有人可以帮忙吗?
PowerShell:
gci "C:\Path\Folder-with-Files" | ren -n {[regex]::replace($_.basename, '(?<=^[^-]*)-', {"$args".PadRight(3, '0')})+ $_.extension}
最佳答案
您的尝试存在两个问题:
您的正则表达式实际上并未捕获要填充的数字。
您正在使用
.PadRight()
而不是.PadLeft()
因此(请注意正则表达式中的 \d+
):
'101-1_File1_Project1-000-END.txt', '101-28_File1_Project1-000-END.txt' | % {
[regex]::Replace($_, '(?<=^[^-]+-)\d+', { $args[0].Value.PadLeft(3, '0') })
}
请注意,在 PowerShell (Core) 中您现在可以使用 -replace
operator使用脚本 block :
'101-1_File1_Project1-000-END.txt', '101-28_File1_Project1-000-END.txt' | % {
$_ -replace '(?<=^[^-]+-)\d+', { $_.Value.PadLeft(3, '0') }
}
两个命令都会输出以下内容:
101-001_File1_Project1-000-END.txt
101-028_File1_Project1-000-END.txt
关于PowerShell PadRight 未添加指定的字符数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68960214/