Соответствие обозначений номеров Powershell и логика переименования элементов - PullRequest
0 голосов
/ 22 марта 2019

В приведенном ниже решении для переименования файлов, взятых из ответа на мой вопрос Ошибка переименования элемента , что делают следующие биты кода?

  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 Ответ

1 голос
/ 22 марта 2019
  1. ^\d{4} - это Регулярное выражение
    ^ якоря в начале строки
    \d представляет собой цифру
    {4} - это квантификатор, задающий ровно 4 из предыдущих, здесь цифры
    () скобки отмечают группу захвата

  2. Цитировать из Get-Help about_Comparison_Operators

    Операторы -Match и -NotMatch заполняют автоматическую переменную $Matches.

    Где $Matches[1] представляет 1-ую группу захвата RegEx.
    Select-Object строит вычисляемое свойство из совпадения (4-значное число) и использует только последний / самый высокий

  3. Получение ранее использованного наибольшего номера было бонусом, который я должен был объяснить лучше 1-е место.
    Поскольку полученное число теперь содержит 4 цифры (не более фиксированных 1 и трех нулей), оператор -format (с коротким значением -f) используется для создания нового имени файла путем вставки содержимого переменной в место {x}, где x - это число, начинающееся с нуля.

...