Попробуйте это:
Get-ChildItem abc* | Where {$_ -match 'abc\((\d+)\)'} |
Foreach {$num = [int]$matches[1]; Rename-Item $_ ("abc({0:000})" -f $num) -wh }
Где этап трубопровода делает две вещи. Сначала передаются только имена файлов, которые соответствуют указанному шаблону. Во-вторых, он использует группу захвата для захвата числовой части имени, которое находится в $matches[1]
.
Этап Foreach применяет сценарий к каждому элементу, представленный $_
, переданный в него. Первое, что он делает, это получить «числовую» часть старого имени файла. Затем он использует команду Rename-Item (команда переименования PowerShell) для переименования из старого имени, представленного $ _, новому имени, которое вычисляется с помощью строки форматирования "abc({0:000})" -f $num
. В этом случае директива форматирования идет в {}
, где 0 представляет собой позицию значения, указанного после -f
. :000
- это директива форматирования, отображающая номер с тремя ведущими нулями. Наконец, -wh
сокращен для -WhatIf
, который направляет потенциально разрушительные операции, такие как Rename-Item, чтобы показать, что бы он сделал, даже не делая ничего. После того, как вы удовлетворены, команда работает правильно, удалите -wh
и запустите его снова.
Было бы здорово, если бы вы предоставили немного объяснений о каком-то синтаксисе там, например, о переименовании. В противном случае приведенный выше шум линии, не читая довольно много документа powershell. –
Готово. Просто хотел получить решение, прежде чем я должен был выполнить поручение. –
Вот что я искал! Полностью понятное объяснение. Благодаря:) – user355889