使用regex和powershell重命名文件名的一部分

时间:2012-06-27 13:25:24

标签: regex powershell-v2.0

我有一些文件要使用regex和powershell重命名,但我不确定文件的模式。

我需要重命名的文件名示例以及它们应该看起来像什么。 ps将名称放在“”中以说明空格。

现在如何命名文件

“[abs] anima.some e147 name [480p] .avi”
“anima.some e147名称#anim group .avi”
“anima.some e147名称[480p] .avi”
“anima有些e147名称[480p] .avi”

如何命名

“动漫一些e147.avi”

1 个答案:

答案 0 :(得分:1)

这是怎么回事:

# Create array of filenames
$files = 
"[abs] anima.some e147 name [480p].avi",
"anima.some e147 name #anim group .avi",
"anima.some e147 name [480p].avi",
"anima some e147 name [480p].avi"

# Setup patterns to match against
$pattern1 = "\[\w+\] ([^.]+).([\w]+) ([\S]+) [\w]+ \[[\w]+\].avi"
$pattern2 = "([^.\s]+).([\w]+) ([\S]+) .*.avi"

# Loop through file names and attempt matching
foreach($f in $files)
{
    if($f -match $pattern1)
    {
        $string = (Get-Culture).TextInfo.ToTitleCase($matches[1]) + " " + $matches[2] + " " + $matches[3] + ".avi"
        $string
    }
    elseif($f -match $pattern2)
    {
        $string = (Get-Culture).TextInfo.ToTitleCase($matches[1]) + " " + $matches[2] + " " + $matches[3] + ".avi"
        $string
    }
    else
    {
        "unmatched file: " + $f
    }
}

输出结果为:

Anima some e147.avi
Anima some e147.avi
Anima some e147.avi
Anima some e147.avi