我家里有一台媒体服务器,我已经创建了一个脚本来提取所有文件名并在将它们放入CSV之前对它们进行排序。我唯一的问题是它对字母数字进行排序,但从电影标题的角度来看,我想忽略" A"," An"和"""""" ;。有没有办法忽略这些字符串并使排序正常工作而不实际更改CSV中的文件名?
答案 0 :(得分:2)
您可以使用以下内容。
由于缺少样本数据,我不知道文件名的结构(单词分隔符等),但您可以根据需要自定义以下代码。代码本质上是通过分隔符'_'
,' '
和'.'
拆分基本文件名,过滤掉被忽略的单词('The'
,'A'
,{ {1}}等)并将部分连接成一个字符串
请注意,在这结束时,文件名的比较没有他们的初始单词分隔符(即'An'
和'The_Blue_House.mpg'
将被视为相同),恕我直言是一件好事,但您的需求可能会有所不同。
希望有所帮助
'The.Blue.House.mpg'
答案 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。