![根据文件名中的关键词组织文件](https://linux22.com/image/1365445/%E6%A0%B9%E6%8D%AE%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%AD%E7%9A%84%E5%85%B3%E9%94%AE%E8%AF%8D%E7%BB%84%E7%BB%87%E6%96%87%E4%BB%B6.png)
我的电脑上有很多(超过 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]+)[-]+.*$”,这必须进行调整才能匹配不同的类别。