Dateien anhand von Schlüsselwörtern in Dateinamen organisieren

471
digital-Ink

Ich habe viele (dh mehr als 10 000) Dokumente auf meinem PC, die ich in verschiedenen Kategorien organisieren möchte, basierend auf deren Dateinamen. Die meisten Dateien haben beschreibende Dateinamen, so dass sie einfach nach ihrem Namen kategorisiert werden können.

Ich dachte daran, einen Index der Wörter zu erstellen, die in den Dateinamen erscheinen (aber ich weiß nicht, wie ich das erreichen kann), dann den Index durchgehen und die relevantesten Wörter auswählen (dies wird manuell gemacht), die dann das werden Kategorienamen für meine Dateien. Dann möchte ich automatisch Ordner erstellen, die auf diesen Kategorienamen basieren, und die Dateien (automatisch) in diese Ordner verschieben. Wenn eine Datei zu mehreren Kategorien gehört, möchte ich NTFS-HardLinks erstellen (anstatt jede Datei mehrmals zu kopieren).

Ich benutze Windows 7. Wissen Sie, wie ich diese Aufgabe am besten erreichen kann?

Ich habe daran gedacht, Everything zu verwenden (wodurch sofort eine Liste aller Dateien angezeigt werden kann, die ein bestimmtes Wort in ihren Dateinamen enthalten), aber das Hauptproblem besteht darin, die Kategorienamen zu erhalten (da ich zuerst eine Liste aller Wörter benötige, die angezeigt werden in den Dateinamen).

2
+1 interessiert, um zu sehen, was in Antworten aufkommt. Sie könnten dies wahrscheinlich in Powershell erreichen, indem Sie 'Get-ChildItem -recurse' verwenden und dann eine ForEach-Funktion verwenden, um die zurückgesendeten Dateien zu pfeifen. viel besser, wenn es etwas gibt, das dies bereits tut. James vor 10 Jahren 1
Könnten Sie ein paar Beispieldateinamen posten, damit wir das Namensmuster sehen können. Martin vor 10 Jahren 0
@ Martin: Viele sind Bücher, andere sind Forschungsartikel. Normalerweise enthält der Titel den Autor, seine Initialen, den Titel des Buches oder Artikels. Einige Dateinamen enthalten _ anstelle von 'Leerzeichen'. digital-Ink vor 10 Jahren 0

1 Antwort auf die Frage

1
Martin

Ein kurzes PowerShell-Skript, in dem alle Dateinamen aufgelistet sind, die mit "category_name-anyText.anyExtension" übereinstimmen:

$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; } 

Beispiel: Dateien:

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

Würde zu folgenden Kategorien führen:

 David_Eddings Jan_Myrdal George_Orwell 

Dies ist der reguläre Ausdruck, der mit den Dateinamen übereinstimmt: "^ ([a-z0-9] +) [-] +. * $", Dies müsste an verschiedene Kategorien angepasst werden.