Musterlösungen: Dateien verschieben abhängig vom Teil des Dateinamens

Mitglied: Hopfman

Hopfman (Level 1) - Jetzt verbinden

09.03.2016, aktualisiert 10.03.2016, 7982 Aufrufe, 17 Kommentare

Ich habe eine ständig wachsende Anzahl von Dateien aus unterschiedlichen Quellen, die in Unterverzeichnisse verschoben werden sollen. So weit so einfach.

Die Herkunft der Dateien ist aus einem Anfangsstring unterschiedlicher Länge erkennbar, dann kommt ein eindeutiger Separator und dann weitere Dateiangaben. Die Dateien sollen in ein Unterverzeichnis (das ggf. noch nicht existiert) und dem Part des Dateinamens entspricht, der vor dem Separator kommt.

Beispiel:
1 m1234__20160309.log
2 m1234__20160308.log
3 m34xl2__0900-20160308.avi
4 m34xl2__20160308.txt
5 n890__tv21000.jpg

Datei 1 und 2 in Verzeichnis m1234
Datei 3 und 4 in Verzeichnis m34xl2
Datei 5 im Optimalfall nicht verschieben (da nur eine Datei mit Anfang n890 existiert), oder ohne Prüfung ins Verzeichnis n890.

Die einfache Variante extrahiert also den vorderen Teil einer Datei und verschiebt die Datei dann in ein Unterverzeichnis, das heißt wie der extrahierte Teil.

Die Optimalvariante prüft quasi auf "Teildubletten" und verschiebt nur die, und lässt die Einzelfälle aus.

Ich habe die Hilfe durchsucht und auch gegoorgelt, aber immer nur Varainten gefunden, bei denen der Anfang zumindest von der Länge her gleich war, das ist hier aber nicht der Fall.

Vielleicht weiß hier ja jemand, wie man das am einfachsten machen kann.

Danke
Mitglied: 114757
114757 (Level 4)
09.03.2016, aktualisiert 10.03.2016
Moin.
Powershell z.B.
gegoorgelt
Hoffentlich auch ordentlich ausgespuckt :-) face-smile

Gruß jodel32
Bitte warten ..
Mitglied: bastla
09.03.2016 um 21:05 Uhr
Hallo Hopfman und willkommen im Forum!

Als Batch schematisch etwa so:
Wenn Du Dateien, die verschoben werden, angezeigt haben möchtest, lass am Ende der Zeile 9 ">nul" weg.

Grüße
bastla
Bitte warten ..
Mitglied: TlBERlUS
09.03.2016, aktualisiert um 22:02 Uhr
Nabend,

Powershell:


Edit: @114757 mal wieder schneller unterwegs mit der Powershell als ich; und dazu noch kürzer :) face-smile
Bitte warten ..
Mitglied: Biber
09.03.2016 um 21:44 Uhr
[OT]
Moin alle,

na kommt, jetzt noch einen (vorzugsweise kommentierten) VBS-Schnipsel dazu, dann mach ich einen "Tipp" aus den ganzen Musterlösungen.

Und lass ihn als Referenz für künftige verzweifelte GoorglerInnen stehen.

Ich warte....

Grüße
Biber
P.S. An manchen Tagen ist es mir eine Freude, im Bereich "Entwicklung" mitzulesen.
[/OT]
Bitte warten ..
Mitglied: Hopfman
09.03.2016 um 21:45 Uhr
Vielen lieben Dank, perfekt!

Und während ich bastlas batch noch einigermaßen verstehe, wird Powershell für mich immer ein Buch mit 7 Siegeln bleiben...
Bitte warten ..
Mitglied: TlBERlUS
09.03.2016, aktualisiert um 21:56 Uhr
Zitat von @Biber:
na kommt, jetzt noch einen (vorzugsweise kommentierten) VBS-Schnipsel dazu, dann mach ich einen "Tipp" aus den ganzen Musterlösungen.
Kann ich leider nicht mit dienen :) face-smile
Und lass ihn als Referenz für künftige verzweifelte GoorglerInnen stehen.
Soll man für den Lern-Effekt den Code kommentieren?
Edit: Lesen sollte man nochmal üben -.-
P.S. An manchen Tagen ist es mir eine Freude, im Bereich "Entwicklung" mitzulesen.
Warum das?
Bitte warten ..
Mitglied: TlBERlUS
LÖSUNG 09.03.2016 um 21:47 Uhr
Zitat von @Hopfman:

Vielen lieben Dank, perfekt!

Und während ich bastlas batch noch einigermaßen verstehe, wird Powershell für mich immer ein Buch mit 7 Siegeln bleiben...
och, ist eig. wesentlich einfacher als Batch.

Magst du den Thread dann noch als gelöst markieren?
Bitte warten ..
Mitglied: Hopfman
09.03.2016 um 21:49 Uhr
Auch hier: Funktioniert perfekt. Einziges Manko ist, dass der Separator nicht nur an einer Stelle zu ändern ist, das ist beim PS-Script natürlich eleganter. Ich habe auch nicht erwähnt, dass der Separator in verschiedenen Verzeichnissen wechselt (zB __ oder ' -- ' mit Leerstellen etc.)

Auf jeden Fall seid ihr echt fix, toll!

Ich möchte gar nicht sagen, wie lange ich die Dateien bis jetzt von Hand verschoben habe. :-/ face-confused
Bitte warten ..
Mitglied: bastla
10.03.2016, aktualisiert um 01:09 Uhr
Hallo Hopfman!

Wenn der Separator mehrere Zeichen umfasst, müsste der Batch anders gestaltet werden - ansonsten lässt sich aber zumindest mit einer Variablen die Anpassung vereinfachen (auf speziellen Wunsch ausnahmsweise sogar mit Kommentaren ;-) face-wink):
Grüße
bastla

P.S.: Als unkommentierte (und nur oberflächlich getestete) Draufgabe auch noch die Variante mit erweitertem Separator:

P.P.S.: @ Biber
Als VBS braucht das (wegen der Dateizählung - ein Pendant zu dir "* - *.*" gibt es mE ja leider nicht) ewig :-( face-sad:

Bitte warten ..
Mitglied: Biber
10.03.2016, aktualisiert um 08:24 Uhr
[OT ii]
Moin alle,

ich danke nochmals euch unermüdlichen Skriptern und ändere diese "Frage" mal zu einem "Tipp" um.
Denn ich denke, diese Muster-Skizzen werden auch noch anderen hilfreich sein.

Zum der ewigen Kontroverse "Kommentieren von Code" vs "Mein Schnipsel ist doch selbsterklärend"...

ich sach ma' so.... ich schreibe am liebsten Oneliner... da gehe ich der Diskussion aus dem Weg.

Was immer für eine Kommentierung spricht: wenn es ganz blöd läuft, dann muss auch ich mal einen mehrzeiligen Schnipsel anpassen....
Aber dreieinhalb Jahre, nachdem ich ihn mal flüssig runtergetippt habe (sofern ich meine Tastaturfertigkeiten als flüssiges Tippen bezeichnen kann), brauche ich erstmal ein paar Minuten, um überhaupt nachzuvollziehen, WTF ich mir denn dabei gedacht habe.

Andererseits...
Ich liebe auch selbstdokumentierenden Code und "sprechende Variablen" wie strDayOfWeek = 42;. Vor allem, wenn ich so einen "geerbten" Schnipsel mal warten muss.

Aber was soll's... Unsere Kantine dokumentiert auch nicht jede Zutat im Nudelauflauf.

Grüße
Biber
[/OT ii]
.
Bitte warten ..
Mitglied: 114757
114757 (Level 4)
10.03.2016, aktualisiert um 14:22 Uhr
Ein gutes hat das weglassen der Doku hier aber manchmal, die Leute sind gezwungen sich damit auseinanderzusetzen, statt oft nur copy n' paste zu betreiben, ist zwar für den TO etwas mehr Aufwand aber auch das kann einen positiven Lerneffekt für den TO bedeuten ;-) face-wink

Ist zwar bei Powershell Onlinern etwas aufwendiger zu dokumentieren, da man einen Roman vor die Zeile schreibt, aber dem guten Willen habe ich die Zeilen oben auch noch nachträglich kommentiert.

Aber ich sehs schon voraus wenn wir auf den Beitrag hier verweisen, kommt zu 95% wieder die Antwort von den meisten:
"Aber bei mir ist das doch ganz anders ?" ;-) face-wink
Bitte warten ..
Mitglied: Tomilai
11.09.2016 um 09:38 Uhr
Hallo Bastla,
vielen Dank für diese Lösung. Mein Problem ist ähnlich: Das Kriterium bei mir ist der Teil nach dem Unterstrich.
Z.B:
Original Ordner:
Berta_PC01.txt
Berta_PC02.txt
Berta_PC03.txt
Thomas_PC01.txt
Thomas_PC02.txt
Thomas_PC03.txt
Ziel:
Ordner PC01:
Berta_PC01.txt
Thomas_PC01.txt
Ordner PC02:
Berta_PC02.txt
Thomas_PC02.txt

Deine Lösung sortiert und verschiebt nach dem ersten Teil des Dateinamens.
Ich habe versucht das zu ändern, ohne Erfolg.
Danke und viele Grüße
Thomas
Bitte warten ..
Mitglied: bastla
11.09.2016 um 13:05 Uhr
Hallo tomcruise!

Versuch es damit (vüllig ungetestet):
Grüße
bastla
Bitte warten ..
Mitglied: Tomilai
11.09.2016 um 16:43 Uhr
Hi Bastla,
es funktioniert wie gewünscht, vielen lieben Dank.
Hast du eine Empfehlung wo man Batchprogrammierung am besten lernen kann? Bücher?..
Ich hab gegooglet, aber das Thema scheint irgendwie nicht viel Literatur zu bieten.
Viele Grüße
Thomas
Bitte warten ..
Mitglied: bastla
11.09.2016 um 17:25 Uhr
Hallo Tomcruise!

So ziemlich alles, was ich über Batch weiß, stammt aus dem Forum hier. :-) face-smile

Ansonsten ist meine Empfehlung ganz klar "learning by doing" ...

Grüße
bastla
Bitte warten ..
Mitglied: Tomilai
11.09.2016 um 21:57 Uhr
Danke dir Bastla :) face-smile
Schöne Grüße
Thomas
Bitte warten ..
Mitglied: 4sb3st
02.03.2018 um 15:31 Uhr
Batch mit Separator funktioniert wunderbar mit Dateien. Danke hier für die Mühe. Leider komme ich nicht weiter, aufgrund von Unwissenheit, aus diesem Script etwas zu basteln, dass auch nur für Ordner funktioniert.

Sprich: Alle Ordner samt Inhalt, bis zu einem bestimmten Separator in den Ordner legen, der nach dem Teil bis zum Separator benannt wird oder vllt. verständlicher :) face-smile

Guck im Ordnernamen bis zum Seperator, erstelle einen Ordner benannt nach dem Teil bis zum Separator und verschiebe Ordner inklusive Inhalt in den neuen Ordner. Wenn Ordner bereits vorhanden, dann verschiebe in den vorhandenen Ordner.

Beispiel:

(1)Ordner var1_var2_separator1_var3
verschieben in Ordner var1_var2

Ordner var1_var2_separator1_var4
verschieben in den bereits vorhandenen Ordner var1_var2

(2)Ordner var1_separator1_var2
verschieben in Ordner var1

usw.

Ich bedanke mich im Voraus für die Unterstützung. :) face-smile
Bitte warten ..
Heiß diskutierte Inhalte
Off Topic
Realistische Gehaltsvorstellung für eine "IT-Allroundkraft"
gelöst JiggyLeeVor 1 TagFrageOff Topic22 Kommentare

Hallo an alle, ich hege momentan den Wunsch mich von der alten verstaubten Behörden Bürokratie und langweiliger Aufgaben los zu lösen und in einem ...

Windows 10
Windows 10 Geschwindigkeitprobleme trotz viel mehr Gb Ram
Matthes88Vor 1 TagFrageWindows 1047 Kommentare

Hallo ihr lieben aaaalso : Da mein neuer Arbeitsspeicher (32gb) von meiner alten Windows 7 version (max mit 8gb kompatibel) nicht angenommen wurde, habe ...

Humor (lol)
Tipp: Dinge, die man besser nicht klaut
altmetallerVor 1 TagTippHumor (lol)14 Kommentare

Hallo, so wurde meiner Hündin z.B. heute der (eingeschaltete) GPS-Tracker mit Mobilfunkanbindung quasi "direkt vom Halsband weggefunden". Akku hatte noch 60% :-P Und ich ...

Grafikkarten & Monitore
Monitorhalterung mit 80cm Armlänge
ben1300Vor 1 TagFrageGrafikkarten & Monitore7 Kommentare

Guten Abend ! ich bin auf der Suche nach einer Monitorhalterung, im besten Fall ohne Bohrung für einen 28" Monitor (Vesa Halterung). Nun kommt ...

Netzwerkmanagement
Sicherheitsrisiken Synology DS Admin Konto
RitchtoolsVor 20 StundenFrageNetzwerkmanagement4 Kommentare

Hallo Zusammen, ich habe die Pflege von einem Firmen NAS übernommen (Synology) es sind mehrere Rechner im Netzwerk die auf Daten zugreifen. Leider hat ...

Microsoft
Datenkrake - Browser
DennisWeberVor 17 StundenErfahrungsberichtMicrosoft6 Kommentare

Hallo zusammen, ich empfehle euch mal definitiv in "Temp" Verzeichnis eures Browsers zu schauen. Es war für mich erschreckend, wie viele wichtige Dokumente und ...

Cloud-Dienste
Cloud PBX bzw. IP Telefon für Ausland
decehakanVor 1 TagFrageCloud-Dienste3 Kommentare

Hallo Zusammen, Ich suche Cloud Telefon ( Cloud PBX, IP-Telefon), sodass ich von Ausland aus über eine deutsche Rufnummer auf mein Handy erreichbar bin. ...

E-Mail
Office 365 mit Wordpress nutzen
gelöst tobitobsnVor 1 TagFrageE-Mail6 Kommentare

Wir nutzen einen Webhoster, wo wir eine Wordpress Webseite betreiben und haben vor einiger Zeit zu Office 365 gewechselt. Unser Webhoster erlaubt innerhalb von ...