Powershell 数字符号匹配和重命名项目逻辑

Powershell number notation matches and rename-item logic

在下面的重命名文件的解决方案中,摘自对我的问题 的回答,以下代码的作用是什么?

  1. ^\d{4}
  2. e={$Matches[1]}
  3. Rename-item -Newname {"{0:D4} - sp - C - {1}" -f ++$Count.Value,$_.Name}

对于 1。我认为这是一个四位数,但我想了解使用的符号。

对于2.$Matches没有在任何地方设置,这是Select-Object特有的变量吗?

对于 3. {0:D4} 和同一字符串末尾的 {1} 是做什么的。此外,此行是否使用逗号分隔符连接两个字符串?

$Count = [Ref][math]::Max(1000,
    [int](Get-ChildItem -Path $Folder -Filter *.sql -File|
            Where-Object Name -match '^(\d{4}) - sp - C -' | 
            Select-Object @{n='Count';e={$Matches[1]}} -Last 1).Count)

Get-ChildItem -Path $Folder -Filter *.sql -File |
  Where-Object Name -NotMatch '^\d{4} - sp - C - ' | 
    Rename-item -Newname {"{0:D4} - sp - C - {1}" -f ++$Count.Value,$_.Name}
  1. ^\d{4} 是一个 Regular Expression
    ^ 行开始处的锚点
    \d代表一个数字
    {4} 是一个量词,正好指定前面的 4 个,这里是 digits
    () 括号标记捕获组

  2. 引用自Get-Help about_Comparison_Operators

    The -Match and -NotMatch operators populate the $Matches automatic variable.

    其中 $Matches[1] 表示 RegEx 的第一个捕获组。
    Select-Object 从匹配项(4 位数字)构建计算得到的 属性 并且仅使用 last/highest

  3. 获得之前使用的最高数字是一个奖励我应该更好地解释第一名。
    由于获得的数字现在包含 4 位数字(不再是固定的 1 和三个零),因此 -format operator(简称为 -f)用于通过插入变量来构建新文件名代替 {x} 的内容,其中 x 是从零开始的数字。