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

问题描述 投票:0回答:1

在下面的解决方案重命名从我的问题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}
powershell match powershell-v3.0
1个回答
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是基于零的数。
© www.soinside.com 2019 - 2024. All rights reserved.