PowerShell PadRight 未添加指定的字符数

标签 powershell

我有一系列要重命名的文件。我想在第一次出现“-”分隔符后用填充的零(总共 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/

相关文章:

.net - 单个 .NET 程序集针对两个不同的 CLR?

powershell - 通过 Powershell 将共享打印机添加到远程计算机

Powershell DSC : Can someone please provide me an example on how to use a resource?

powershell - 为用户返回管理员 saccountname

powershell - 检测管道中外部程序已退出的方法

windows - 将参数传递给 powershell 脚本

.net - 使用 PowerShell 连接到 Azure FTP 但在 C# 中工作时出现错误 501

xml - 在 PowerShell 中打印 XmlElement 名称

powershell - 强制 Get-Date 使用 '/' 作为日期分隔符

arrays - 如何在 PowerShell 中创建数组的数组?