根据文件名中的关键词组织文件

根据文件名中的关键词组织文件

我的电脑上有很多(超过 10,000 个)文档,我想根据文件名将它们组织成几个类别。大多数文件都有描述性文件名,因此仅凭名称就可以轻松对它们进行分类。

我想建立一个出现在文件名中的单词的索引(但我不知道如何实现),然后浏览索引并选择最相关的单词(这将手动完成),这些单词将成为我的文件的类别名称。然后,我想根据这些类别名称自动创建文件夹并(自动)移动这些文件夹中的文件。当一个文件属于多个类别时,我想创建 NTFS 硬链接(而不是多次复制每个文件)。

我使用 Windows 7。您知道如何才能最好地完成这项任务吗?

我想到用一切(可以立即显示文件名中包含给定单词的所有文件的列表),但主要问题在于获取类别名称(因为首先我需要文件名中出现的所有单词的列表)。

答案1

简短的 PowerShell 脚本,列出所有与“category_name-anyText.anyExtension”匹配的文件名:

$dir="Q:\Test";
$categories="Q:\categories.txt";
$cats=@{};

get-childitem $dir -recurse | %{

    $file=$_;
    if(-not $file.PSIsContainer)
    {
        if( $file.BaseName -match "^([a-z0-9]+)[-]+.*$")
        {
            if( -not $cats.ContainsKey($matches[1]))
            {
                $cats.add($matches[1], [int]1);
            }
            else
            {
                $val=$cats.Get_Item($matches[1]) + 1;
                $cats.Set_Item($matches[1], $val);
            }
        }
    }
}

$cats.GetEnumerator() | %{

    echo $_.Key >> $categories;
}

例如:文件:

   David_Eddings-The_Mallorean.epub
   Jan_Myrdal-Confessions_of_a_disloyal_european.txt
   George_Orwell-Homage_to_Catalonia.mobi

将产生以下类别:

   David_Eddings
   Jan_Myrdal
   George_Orwell

这是匹配文件名的正则表达式:“^([a-z0-9]+)[-]+.*$”,这必须进行调整才能匹配不同的类别。

相关内容