Script - Dateien nach dem Änderungsdatum vergleichen und ggf. verschieben

mitok12

Newbie
Registriert
Sep. 2017
Beiträge
2
Hallo zusammen,

durch einem Programmwechsel (Reference Manager - EndNote) wurden unbewusst alle meine PDFs, die ich seit dem bearbeitet habe, im falschen Ordner als Kopie abgelegt. Aufgefallen ist mir das leider erst nach knapp 2 Jahren und nun habe ich den Salat. Eigentlich sollten die PDFs im Ordner „XYZ“ jeweils im richtigen Unterordner (nach Jahren sortiert) abgespeichert werden. Aber das Programm hat stattdessen komischerweise einen neuen Ordner angelegt „ABC“ und dort für jede PDF-Datei einen eigenen Unterordner mit einer zufällig generierten 10-stelligen Zahl erstellt.

Mittlerweile sind es knapp 2.000 Dateien und der Aufwand die mit der Hand zu sortieren wäre Immens und meine letzte Lösung. Deswegen wollte ich mal fragen, ob jemand eine Idee für ein Skript (PowerShell, Batch oder VBS) hat, die die PDF-Dateien nach dem Änderungsdatum abgleicht und ggf. in den richtigen Jahresordner in „XYZ“ verschiebt.
Ich bin leider kein IT-ler und kenne mich mit Skriptprogrammierung nur ganz wenig aus.
Hier nochmal genauer erklärt:

IST-Zustand

Es geht um zwei Ordner

C:\ABC\...
C:\XYZ\...

Im Ordner ABC befinden sich knapp 2.000 Unterordner, die nicht weiter verschachtelt sind. Jeder Unterordner hat als Ordnernamen eine 10-stellige zufällige Nummer wie z.B. 0012542536 oder 4520211258. Und in diesen Unterordnern befindet sich immer jeweils eine PDF-Datei.

Im Ordner XYZ befinden sich ebenfalls Unterordner, die nach Jahreszahlen angelegt wurden. Beginnend von 1960 bis 2017. Innerhalb der jeweiligen Jahresordner liegen immer die passenden PDFs.

Soll-Zustand
Ist es möglich, dass das Skript nach und nach im Ordner ABC nach PDF-Dateien sucht, sich den Dateinamen merkt, anschließend prüft ob im Ordner Controlling irgendwo in den Jahresordnern die PDF-Datei mit dem gleichen Namen schon vorhanden ist und nach dem Änderungsdatum vergleicht?

Ist das Änderungsdatum der PDF-Datei aus dem Ordner Einkauf aktueller, dann wird die Datei in den richtigen Jahresordner verschoben und somit die ältere Datei überschrieben.

Ist das Änderungsdatum der PDF-Datei aus dem Ordner Controlling dagegen aktueller, dann wird die Datei einfach gelöscht.
In eine Datei mit dem gleichen Namen nicht zu finden, dann soll die Datei nach C:\ABC\Manuell verschoben werden.

Vielen Dank schon mal. Für jede Hilfe bin dankbar.

Beste Grüße,
Michael
 
hallo michael,

klar geht das. unter windows waere powershell wahrscheinlich die beste loesung(?)

das hier sollte einen anfang liefern:

datum von der datei holen: https://stackoverflow.com/questions/1018934/simple-powershell-lastwritetime-compare
daten vergleichen: https://stackoverflow.com/questions/5097125/powershell-comparing-dates
ueber dateien iterieren: https://stackoverflow.com/questions/18847145/loop-through-files-in-a-directory-using-powershell
datei/pfad auf existenz pruefen: https://technet.microsoft.com/en-us/library/ee177015.aspx

  • erster schritt wird es sein, ueber deine zwei ordner zu iterieren, und dann darin verschachtelt ueber die jeweiligen unterordner zu iterieren, ueber deren PDF-dateien du dann iterieren darfst. also drei ebenen des iterierens.
  • die jahreszahl eines datums kriegst du so:
    Code:
    $a = Get-Date ...
    $a.Year
  • du wirst einen existenztest fuer den zielordner (jahr; falls irgendwann mal 2018/2019/... ist) machen muessen (und ihn evtl. erstellen) sowie einen test auf die existenz der zieldatei
  • anhand eines datumstest der ziel- und quelldatei kannst du dann entscheiden, was du machst (Move-Item oder Remove-Item)
 
Also ein Script habe ich nicht parat, aber mit der TotalCommander Suchfunktion (ALT-F7), kann das Jahr der Datei als Suchkriterium genutzt werden. Als Ergebnis gibt es Liste mit allen Dateien die im Jahr 20xx erstellt wurden. Die können dann markiert werden und mit F6 in den gewünschten Ordner verschoben werden. Der Vorgang müsste dann für jedes Jahr wiederholt werden, aber ich denke das ist ein überschaubarer Aufwand. Das ganze sollte nicht länger als 5 Minuten dauern.
 
Gibt sicher auch Programme dafür, aber mit PowerShell ist das auch schnell erledigt. Allerdings solltest du erstmal bei ein paar PDFs prüfen, ob das Dateidatum jeweils noch korrekt ist. Ansonsten hast du ein größeres Problem.
 
Vielen Dank für die Antworten!
Da hilft mir schon enorm weiter. Heute Abend setze ich mal dran :)
 
Das sollte simpel sein...

1.) erstell dir eine kopie vom ordner, zum testen

2.) les den ordner ein z.b. mit
$tmp= get-childitem und dann -recurse und -filter sind dein Freunde

dann loopst du da durch und packst sie in den richtigen ordenr


$tmp = Get-ChildItem C:\Windows

$tmp[0].CreationTime
$tmp[0].LastAccessTime
$tmp[0].LastWriteTime
 
Zurück
Oben