2010-06-01 3 views

ответ

6

Попробуйте это:

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 и запустите его снова.

+0

Было бы здорово, если бы вы предоставили немного объяснений о каком-то синтаксисе там, например, о переименовании. В противном случае приведенный выше шум линии, не читая довольно много документа powershell. –

+0

Готово. Просто хотел получить решение, прежде чем я должен был выполнить поручение. –

+0

Вот что я искал! Полностью понятное объяснение. Благодаря:) – user355889

Смежные вопросы