silver0409
Goto Top

Bitte um Hilfe bei der Sortierung großer Datenmengen - vermutlich am besten via Batch oder Shell

Hallo zusammen!

Ich habe ungeplanter Weise die Betreuung eines "Servers" mit Win 7 64it übernehmen dürfen, wo tausende Dateien in Ordnern liegen, die nicht sortiert sind. Es geht um mehrere TB, die auch noch in verschiedenen Partitionen verstreut liegen. Mein Vorgänger hatte da wohl ein System, aber ich kann leider keines erkennen. Und da er aufgrund von Krankheit ausgefallen und nicht ansprechbar ist, darf ich nun schauen, wie ich damit klar komme...
Es handelt sich immer um 2 Dateien, die zusammen gehören. Einmal die Datei selbst, meist eine .mpg und eine .txt, mit der Beschreibung, was die .mpg beinhaltet. Das Ziel ist es, dass alle Versuche, die zusammengehören in einem Ordner sind und man nicht erst 5 verschiedene Freigaben durchsuchen muss, um alle zusammengehörenden Files zu finden.

Mein Wunsch wäre es, eine Batch/Shell zu haben, die hingeht und die Daten, die zusammengehören in einen Ordner packt und damit das Chaos hier etwas reduziert. Das Problem ist, dass die Benennung der Daten totaler Murks ist. Die Dateinamen haben, soweit ich das mittlerweile überblicken kann ein ähnliches Schema wie folgt:

Versuch234 Station1 2001 12-15 15-05-01

Es wird fast ausschließlich mit Leerzeichen gearbeitet. Es werden zur Trennung der einzelnen Segmente keine Bindestriche, Unterstiche oder ähnliches verwendet.

"Versuch234" kann nur 1 Wort, aber auch ein Satz samt Gedankenstrich sein. Extrem-Beispiel: "Wir testen das neue Labor - hoffentlich geht alles"

"Station1" ist entweder 1 Wort oder 2 Worte, zwischen denen 1 Leerzeichen enthalten ist. Gibt an, wer bzw. wo der Versuch gemacht wurde. Gibt rund 20 Möglichkeiten, was dort stehen kann. Beispiel: Labor2UG, RaumtestRB, SimulationWL oder Langzeit LaborLA

"2001" gibt das Jahr an, aus dem der Versuch stammt.

"12-15" Monat & Tag des Versuchs

"15-05-01" Uhrzeit des Versuchs

Mein Problem ist, dass der 1. Teil "Versuch234" längenmässig alles von 5 bis 70 Zeichen lang sein kann, deswegen kann ich nicht einfach sagen, er soll alles bis Zeichen 10 als Ordnername nehmen und die Dateien da rein verschieben. Das einzige vernünftige Selektierungsargument ist "Station1", weil dort sicher der Teil "Versuch234" zu Ende ist und klar ist, um was es eigentlich geht. Denn was das Ganze für mich nicht einfacher macht, ist die Tatsache, dass verschiedene "Station1" zum Teil gleiche "Versuch234" gemacht haben, die natürlich im gleichen Ordner auftauchen sollten, so fern Versuch234 übereinstimmt.

Ich bin absolut kein Programmierer, sondern komme ausm Netzwerk-Bereich, soll heißen vor allem Verkabelung und Co. Ergo habe ich mir zwar diese Musterlösung hier ausm Forum angeschaut, aber komme nicht ganz klar damit.

Würde mich deswegen freuen, wenn sich jemand meines Problems annehmen würde und mir weiterhelfen könnte.

Ich bedanke mich bei euch und wünsche euch einen angenehmen Nachmittag.

Silver0409

P.S. Ich hoffe, ich habe diese Frage im richtigen Bereich gepostet, wenn nicht bitte sagen, wo er hingehört.

Content-ID: 313522

Url: https://administrator.de/contentid/313522

Ausgedruckt am: 22.11.2024 um 06:11 Uhr

TlBERlUS
TlBERlUS 25.08.2016 um 10:39:12 Uhr
Goto Top
Hi,

ist der schematische Aufbau "Versuch XY Station XY..." so immer gleich?
Kannst du eine representative Liste von (vllt. 10) den Dateinamen posten?

Grüße,

Tiberius
Silver0409
Silver0409 25.08.2016 um 11:51:26 Uhr
Goto Top
  • Brandschutrprotokoll neu abgestimmt GeoLab KR 2013 03-17 11-12-00
  • Druckvarianzen nach Neujustierung 01-07 09-25-00
  • Testlauf Spule MtL 2012 11-19 14-25-01
  • Flussveränderung Salze (neu) Lab1PS 2012 03-17 13-22-00 Testreihe 4 von 6
  • Strommessung Testreihe 3 SimulationWL zK 2013 02-10 10-05-03
  • Spannung (4 6) Saal2df_neo 2012 08-31 06-50-01
  • Temperatur Veränderung - Magnetstärke HornsteinA. 2012 08-26 00-20-03
  • Veränderung der Feldstärke - Hoch min Tief Labor1RD 11-08 16-20-00
  • Feldstärken Veränderung Eperiment 2 Saal.1 BaZ 2010 05-13 22-57-00
  • Magnetstrom LaborWR eins 2011 04-23 07-14-00

Habe mal den Versuchteil ("Versuch234") fett und das Was/Wer ("Station1") unterstrichen markiert. Hoffe das ist repräsentativ genug.

TlBERlUS
TlBERlUS 25.08.2016 um 11:56:18 Uhr
Goto Top
Zitat von @Silver0409:

  • Brandschutrprotokoll neu abgestimmt GeoLab KR 2013 03-17 11-12-00
  • Druckvarianzen nach Neujustierung 01-07 09-25-00
Hier gibt es keine Station?

Habe mal den Versuchteil ("Versuch234") fett und das Was/Wer ("Station1") unterstrichen markiert. Hoffe das ist repräsentativ genug.
Eigentlich schon. Gibt es eine Liste der Stationen anhand derer man abgleichen kann?
Ansonsten kann man das schwerlich automatisieren.
TlBERlUS
Lösung TlBERlUS 25.08.2016 aktualisiert um 12:36:01 Uhr
Goto Top
Ich habe mal einen Entwurf gebastelt:
Die ini-Datei enthält die Namen der Stationen in diesem Format:
GeoLab
MtL
HornsteinA
Skript:
clear-host
$source = "C:\Users\adm-sup-sb\Desktop\Powershell\RAW-Files"  
$destinationparent = "C:\Users\adm-sup-sb\Desktop\Powershell\Destination\"  


$ini = gc "C:\Users\adm-sup-sb\Desktop\Powershell\Station.ini"  
$raw = gci $source 

foreach ($r in $raw){
    foreach ($i in $ini){
        if($r -match $i ){  
            $versuch = $r -split  $i
            $foldername = $versuch
  
            $destpath = "$destinationparent\$foldername"  
            $search = Test-Path $destpath
            if ($search -eq $false){
                New-Item $destpath -ItemType directory
            }
            Move-Item $source\$r -Destination $destpath
        }
    }
}

Edit: Ordnerbennenung korrigiert
Silver0409
Silver0409 25.08.2016 um 13:01:21 Uhr
Goto Top
Danke für deine Arbeit!

* Brandschutrprotokoll neu abgestimmt GeoLab KR 2013 03-17 11-12-00
  • Druckvarianzen nach Neujustierung 01-07 09-25-00
Hier gibt es keine Station?

ja leider nicht, habe das beim kurzen Durchsehen bemerkt. Dort muss ich mir dann was anderes einfallen lassen. Teilweise fehlen auch die Jahresangaben, was das es nicht einfacher macht, da Ordnung reinzubringen.

Habe mal den Versuchteil ("Versuch234") fett und das Was/Wer ("Station1") unterstrichen markiert. Hoffe das ist repräsentativ genug.
Eigentlich schon. Gibt es eine Liste der Stationen anhand derer man abgleichen kann?
Ansonsten kann man das schwerlich automatisieren.

Sind wohl etwas mehr, als ich dachte, da es wohl ein paar Wechsel bei den Leuten gab. Aber die .ini zu erstellen, bekomme ich hin, da es einfach ein Name pro Zeile ist face-smile
Bei dem Code handelt es sich um eine Batch oder eine Shell? Bin da echt ein Noob…

$source = "C:\Users\adm-sup-sb\Desktop\Powershell\RAW-Files"
Diesen Teil verstehe ich nicht.
$destinationparent = "C:\Users\adm-sup-sb\Desktop\Powershell\Destination\"
Das ist der Ausgangsordner, indem er arbeiten soll, oder?
$ini = gc "C:\Users\adm-sup-sb\Desktop\Powershell\Station.ini"
Das ist der Ort, wo die .ini abgelegt ist.

Den Rest des Codes verstehe ich glaube ich soweit. Werde es mal ausprobieren, wenn die 2 Fragen von dir beantwortet wurden. Danke vielmals.
TlBERlUS
Lösung TlBERlUS 25.08.2016 um 13:17:46 Uhr
Goto Top
Zitat von @Silver0409:

Danke für deine Arbeit!
Bei dem Code handelt es sich um eine Batch oder eine Shell? Bin da echt ein Noob…
Powershell; zum debugging würde ich dir empfehlen den Quelltext in die Powershell-ISE zu kopieren und auszuführen.
ein Update der Powershell könnte evtl. nötig sein (-> netFramework)
aktuelle Verison auf Win7 ist 4.0
$source = "C:\Users\adm-sup-sb\Desktop\Powershell\RAW-Files"
Das war der Testpfad für mich, in dem, zu sortierenden, Dateien liegen
$destinationparent = "C:\Users\adm-sup-sb\Desktop\Powershell\Destination\"
Das ist der Ausgangsordner, indem er arbeiten soll, oder?
Der Pfad in dem die Dateien in die Unterverzeichnisse geschoben werden/wo die Unterverzeichnisse erstellt werden
$ini = gc "C:\Users\adm-sup-sb\Desktop\Powershell\Station.ini"
Das ist der Ort, wo die .ini abgelegt ist.
Jein, das ist der volle Pfad zur ini-Datei (inkl. des Dateinamens)
Den Rest des Codes verstehe ich glaube ich soweit. Werde es mal ausprobieren, wenn die 2 Fragen von dir beantwortet wurden. Danke vielmals.

Ich empfehle die Pfade auf einen Test-Ordner anzupassen und nicht direkt an den live-daten herumzuspielen.
Silver0409
Silver0409 25.08.2016 aktualisiert um 15:57:18 Uhr
Goto Top
Habe das Ganze an einem Schwung (ca. 500) Testdaten ausprobiert und es funkt an sich sehr gut.

Leider gibt es noch 3 größere Probleme:

  • doppelte Leerzeichen
Also Beispielsweise:
zur Verdeutlichung habe ich die Leerzeichen durch X ersetzt.
Brandschutrprotokoll neu abgestimmtXGeoLab KR 2013 03-17 11-12-00
Brandschutrprotokoll neu abgestimmtXXGeoLab KR 2013 03-17 11-12-00

Da macht die Shell natürlich 2 verschiedene Ordner draus.


  • "-" Zeichen ohne Sinn
Brandschutrprotokoll neu abgestimmt - GeoLab KR 2013 03-17 11-12-00
Brandschutrprotokoll neu abgestimmt GeoLab KR 2013 03-17 11-12-00
Das " - " im oberen Beispiel steht ohne Grund dort, aber die Powershell weiß das natürlich nicht und macht 2 verschiedene Ordner drauß, die sich durch " -" unterscheiden...


  • Wiederholungen von Teilbezeichnungen
Hier sind Informationen im Dateinamen doppelt, ich weis leider nicht warum oder von wem das so gemacht wurde.

Brandschutrprotokoll neu abgestimmt neu abgestimmt GeoLab KR 2013 03-17 11-12-00
Brandschutrprotokoll Wiederholung vom Test Di Wiederholung vom Test Di GeoLab KR 2013 03-17 11-12-00

Diese Dopplungen habe teilweise den zusätzlichen Effekt, dass die Powershell nicht arbeiten kann, weil der Ordner/Datei-Name zu lang wäre.

Deswegen wäre es mir am liebsten, wenn ich eine separate Powershell hätte, um diese Probleme von vorne herein zu beheben. Also 1 Shell nur zum Ändern der Dateinamen und dann die bereits vorhandene, die die Daten einsortiert.

##aktualisiert, um 3tes Problem einzufügen.
TlBERlUS
Lösung TlBERlUS 26.08.2016 aktualisiert um 19:39:56 Uhr
Goto Top
Zitat von @Silver0409:

Habe das Ganze an einem Schwung (ca. 500) Testdaten ausprobiert und es funkt an sich sehr gut.
freut mich
Leider gibt es noch 3 größere Probleme:
meh
* doppelte Leerzeichen
Also Beispielsweise:
zur Verdeutlichung habe ich die Leerzeichen durch X ersetzt.
Brandschutrprotokoll neu abgestimmtXGeoLab KR 2013 03-17 11-12-00
Brandschutrprotokoll neu abgestimmtXXGeoLab KR 2013 03-17 11-12-00

Da macht die Shell natürlich 2 verschiedene Ordner draus.
kann ich bei mir nicht bestätigen.
* "-" Zeichen ohne Sinn
Brandschutrprotokoll neu abgestimmt - GeoLab KR 2013 03-17 11-12-00
Brandschutrprotokoll neu abgestimmt GeoLab KR 2013 03-17 11-12-00
Das " - " im oberen Beispiel steht ohne Grund dort, aber die Powershell weiß das natürlich nicht und macht 2 verschiedene Ordner drauß, die sich durch " -" unterscheiden...
ist im anhängenden Skript behoben
* Wiederholungen von Teilbezeichnungen
Hier sind Informationen im Dateinamen doppelt, ich weis leider nicht warum oder von wem das so gemacht wurde.
Wüsste nicht, wie man das prüfen sollte.
clear-host
$source = "C:\Users\User\Desktop\test\RAW-Files"  
$destinationparent = "C:\Users\User\Desktop\test\Destination"  


$ini = gc "C:\Users\User\Desktop\test\Station.ini"  
$raw = gci $source 

foreach ($r in $raw){
    foreach ($i in $ini){
        if($r -match $i ){  
            $versuch = $r -split  $i
            $foldername = $versuch
            $foldername = $foldername.Replace("-","")  
  
            $destpath = "$destinationparent\$foldername"  
            $search = Test-Path $destpath
            if ($search -eq $false){
                New-Item $destpath -ItemType directory
            }
            Move-Item $source\$r -Destination $destpath
        }
    }
}
TlBERlUS
TlBERlUS 01.09.2016 um 09:42:50 Uhr
Goto Top
Ist das Thema erledigt?
Wenn ja, bitte als gelöst markieren.
Silver0409
Silver0409 02.09.2016 um 13:53:45 Uhr
Goto Top
leider nein. Kann aber im Moment nichts machen, weil ich mit anderer Arbeit zugedeckt bin. Evtl. komme ich am Wochenende dazu, das Thema und die Probleme die noch da sind zu erklären. Danke dir auf jeden Fall für deine viele Arbeit mit mir.
Silver0409
Silver0409 17.09.2016 um 12:35:37 Uhr
Goto Top
So habe es durch einiges an Überstunden und Wochenendarbeit geschafft den Gros in Ordnung zu bringen.

Das größte neue Problem war, dass die Leutchen über die Jahre einfach die Dateibenennung zwischendurch mehrfach geändert haben, sodass der "Was/Wer-Teil" plötzlich am Ende oder mittendrin stand. So konnte die Shell die Dateien zwar sortieren, aber die Ordnernamen beinhalteten plötzlich auch noch Zeit und Jahr.
Habe das dann alles manuell kopiert und das hat mich viel Zeit und Mühe gekostet.

Es fehlen jetzt nur noch 1 Unterbereich mit Versuchen, die teilweise bis zu 15 Versuche in chronologischen Reihenfolge sind, dort muss ich noch dran arbeiten, aber das ist zum Glück nicht besonders dringend.

Danke auf jeden Fall dir TlBERlUS für deine Hilfe.
Es waren insgesamt rund 40.000 Dateien, die sortiert wurden und nun endlich vernünftig strukturiert sind.

Ich markiere das Thema als gelöst, da die Shell gut funktioniert und ich den Rest halt so machen kann/darf.

Schönes Wochenende euch allen
Silver04