Организация файлов по ключевым словам в именах файлов
У меня на компьютере много (то есть, более 10 000) документов, которые я хочу организовать по нескольким категориям на основе их имен файлов. Большинство файлов имеют описательные имена файлов, так что их можно легко классифицировать только по их именам.
Я подумал о создании индекса слов, которые появляются в именах файлов (пока я не знаю, как этого добиться), затем обойдя индекс и выбрав наиболее подходящие слова (это будет сделано вручную), которые станут Названия категорий для моих файлов. Затем я хочу автоматически создавать папки на основе этих имен категорий и перемещать файлы (автоматически) в эти папки. Когда файл принадлежит нескольким категориям, я хочу создать NTFS HardLinks (а не копировать каждый файл несколько раз).
Я использую 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]+)[-]+.*$", Это должно быть скорректировано для соответствия различным категориям.