Переименование файлов с индексом в скобках - PullRequest
2 голосов
/ 02 июня 2010

Я хотел бы написать короткий сценарий powershell для переименования файлов, например:

abc(1), abc(2), .., abc(10), ..,  abc(123), .. 

до

abc(001), abc(002), .., abc(010), .., abc(123), ..

Есть идеи? :)

1 Ответ

7 голосов
/ 02 июня 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...