将电影标题分类为CSV

时间:2016-09-15 03:20:03

标签: sorting powershell csv

我家里有一台媒体服务器,我已经创建了一个脚本来提取所有文件名并在将它们放入CSV之前对它们进行排序。我唯一的问题是它对字母数字进行排序,但从电影标题的角度来看,我想忽略" A"," An"和"""""" ;。有没有办法忽略这些字符串并使排序正常工作而不实际更改CSV中的文件名?

2 个答案:

答案 0 :(得分:2)

您可以使用以下内容。
由于缺少样本数据,我不知道文件名的结构(单词分隔符等),但您可以根据需要自定义以下代码。代码本质上是通过分隔符'_'' ''.'拆分基本文件名,过滤掉被忽略的单词('The''A',{ {1}}等)并将部分连接成一个字符串 请注意,在这结束时,文件名的比较没有他们的初始单词分隔符(即'An''The_Blue_House.mpg'将被视为相同),恕我直言是一件好事,但您的需求可能会有所不同。

希望有所帮助

'The.Blue.House.mpg'

Script in action

答案 1 :(得分:2)

是的,您可以按任何属性对多个对象进行排序,如果没有任何属性符合您的要求,那么您可以向Sort-Object提供一个脚本块,其中包含一些代码“ do xyz to each对象“它将根据scriptblock的输出对它们进行排序 - 这只会用于排序,它不会改变任何东西。

因此,使用您想要的任何代码计算不带前导词A, An, The的名称。在这里,我正在使用正则表达式烹饪,因为它快速,美味并且默认情况下不区分大小写:

Get-ChildItem | Sort-Object -Property { $_.Name -replace '^(A|An|The).' }

但你可以用厨房周围的原料做一些有效的事情:

Function Mangle-FilmName
{
    param($file)

    $name = $file.Name.ToLower()

    if ($name.startswith('an'))
    {
        $name.Substring(4)
    }
    elseif ($name.startswith('the')
    {
        $name.Substring(5)
    }
    ...
    else 
    {
        $name
    }
}

Get-ChildItem | Sort-Object -Property Mangle-FilmName

或者使用switch语句或循环遍历单词数组和/或/ etc。