Переименовать файлы для увеличения номера файла с помощью PowerShell? - PullRequest
2 голосов
/ 16 января 2011

У меня есть куча файлов с именем

attachment.023940
attachment.024039
attachment.024041
attachment.024103

и т.д ...

Мне нужно переименовать файлы, увеличив номер файла на указанное число. (Чтобы они соответствовали нужному идентификатору в базе данных)

Полагаю, я мог бы написать приложение на C #, которое использует RegEx для синтаксического анализа имени файла, но я полагаю, что эту задачу также можно выполнить в PowerShell?

Я обнаружил в SO несколько других потоков об использовании PowerShell для переименования файлов, но ни один из них не обрабатывал увеличение номера файла.

Я нахожусь на Win7, поэтому PowerShell 2.0 доступен.

Ответы [ 5 ]

2 голосов
/ 18 января 2011

Следующий подход работает, потому что число находится в Extension части имени файла.

Get-ChildItem attachment.* | Sort Extension -desc | 
  Rename-Item -NewName {$_.basename + 
                        ".{0:D6}" -f ([int]$_.extension.substring(1) + 1)}

Для этого используется конвейерная обработка в Rename-Item и использование блоков сценариев с другими привязанными к конвейеру параметрами, такими как NewName.

0 голосов
/ 06 июля 2014

Я использовал это, чтобы переименовать мои файлы.Помните, что foreach - это блок скрипта, поэтому все, что вам нужно сделать, это добавить команду в конце для увеличения вашей переменной, например

PS C:\BigHomie> $A = 1
PS C:\BigHomie> dir .\*.* | Sort-Object | foreach {Rename-Item -Path $_.PSPath -NewName $("Attachment." + "{0:D6}" -f $A);$A=++$A}

Обратите внимание на $A=++$A в конце, который увеличиваетсчетчик и числовой форматер D6, гарантирующий минимум 6 ширины.

0 голосов
/ 18 января 2011
Get-ChildItem attachment.* | Move-Item -Destination {
  "attachment.{0}" -f (([int]($_.Name -replace '.*\.(\d+)','$1')) + $increment)
}
0 голосов
/ 16 января 2011

Предполагается, что все ваши номера файлов состоят из 6 цифр и должны содержать лидирующие нули:

$increment = 1
gci attachment.$("[0-9]"*6) | sort -descending |% {
$newext = $increment + $_.name.split(".")[1]
rename-item $_.fullname -newname ('attachment.' + "{0:D6}" -f $newext)
} 
0 голосов
/ 16 января 2011

Как то так?

$file = Get-ChildItem attachment.012345
$file.basename + ".0" + ([int]::parse([regex]::split($file.extension,"\D")) + 123).tostring()


    PS > attachment.012468
...