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

时间:2019-03-22 11:12:39

标签: powershell match powershell-v3.0

在以下重命名从问题Rename-Item error的答案中提取的文件的解决方案中,以下代码段是做什么的?

  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 个答案:

答案 0 :(得分:1)

  1. ^\d{4}Regular Expression
    ^行开始处的锚点
    \d代表一个数字
    {4}是一个量词,恰好指定了前4个数字,此处为数字
    ()括号标记捕获组

  2. 引用Get-Help about_Comparison_Operators

      

    -Match-NotMatch运算符填充$Matches自动变量。

    $Matches[1]代表RegEx的第一个捕获组。
    Select-Object根据匹配(4位数字)构建计算所得的属性,并且仅使用最后/最高

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