Используйте Regex / Powershell для переименования файлов - PullRequest
20 голосов
/ 07 апреля 2011

Как переименовать следующие файлы (Новые => Старые):

filename__Accelerated_C ____ Practical_Programming_by_Example.chm -> C Практическое программирование на Example.chm

filename__Python_Essential_Reference__2nd_Edition_.pdf -> Справочник по Python, 2-е издание. Pdf

filename__Text_Processing_in_Python.chm -> Обработка текста в Python.chm

Ответы [ 3 ]

33 голосов
/ 07 апреля 2011

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

Get-ChildItem directory `
        | Rename-Item -NewName { $_.Name -replace '^filename_+','' -replace '_+',' ' }

Обратите внимание, что я просто перенаправляю объекты на Rename-Item, на самом деле не нужно делать это через Foreach-Object (псевдоним %).

Обновление

У меня нет ничего задокументированного о «магии» со скриптовыми блоками. Если я правильно помню, его можно использовать, если свойство ValueFromPipelineByPropertyName=$true:

function x{
    param(
        [Parameter(ValueFromPipeline=$true)]$o,
        [Parameter(ValueFromPipelineByPropertyName=$true)][string]$prefix)
    process {
        write-host $prefix $o
    }
}
gci d:\ | select -fir 10 | x -prefix { $_.LastWriteTime }
17 голосов
/ 07 апреля 2011

Это должно работать:

ls | %{ ren $_ $(($_.name -replace '^filename_+','') -replace '_+',' ') }
0 голосов
/ 07 апреля 2011

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

$filename = $filename -creplace '_+\.', '.'
$filename = $filename -creplace '_+', ' '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...