使用Regex / Powershell重命名文件

时间:2011-04-07 00:48:39

标签: regex powershell

我正在学习Regex,但我不知道如何将以下文件重命名为我想要的文件。你能帮帮我吗?

BTW,我发现使用Powershell重命名文件非常有用,它可以接受Regex。

  

filename__Accelerated_C ____ Practical_Programming_by_Example.chm    - > C Example.chm的实用编程

     

filename__Python_Essential_Reference__2nd_Edition_.pdf    - > Python Essential Reference 2nd Edition.pdf

     

filename__Text_Processing_in_Python.chm    - > Python.chm中的文本处理

我还包括一些我最喜欢使用的免费在线Regex工具,可能对其他人有用。

http://gskinner.com/RegExr/

http://www.rubular.com/

和备忘单

http://krijnhoetmer.nl/stuff/regex/cheat-sheet/

3 个答案:

答案 0 :(得分:33)

试试这个:

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

请注意,我只是将对象传递给Rename-Item,实际上并不需要通过Foreach-Object(别名为%)。

<强>更新

我没有任何关于scriptblocks'magic'的记录。如果我没记错的话,如果属性为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 }

答案 1 :(得分:17)

这应该有效:

ls | %{ ren $_ $(($_.name -replace '^filename_+','') -replace '_+',' ') }

答案 2 :(得分:0)

试试这个:

$filename = $filename -creplace '_+\.', '.'
$filename = $filename -creplace '_+', ' '