Massenumbenennung von Dateien und Ordnern
Hallo zusammen,
falls der Beitrag in dieser Kategorie falsch ist, bitte in die richtige verschieben.
Stehe vor folgender Aufgabe, in einem Datenverzeichnis befinden sich die Ordner aller Aussendienstmitarbeiter und darunter die Kundenordner. Leider wurden diese und die Kundenordner, sowie die dazugehörigen Dateien alle nach dem Schema "Vorname Nachname" erstellt.
Durch eine komplette Umstrukturierung der Systemlandschaft mit Modernisierung der Hardware soll hier eine neue Namenskonvention Einzug halten.
Leerzeichen und/oder Umlaute ersetzen kann ich mit dem Dateicommander problemlos. Problematisch wird es Ordner und Dateinamen die mit "Vorname Nachname" bzw. "Vorname Nachname datei xyz.abc" gespeichert wurden in "Nachname_Vorname" bzw. "Nachname_Vorname_datei_xyz.abc" umzubenennen. Wie gesagt, Leerzeichen und/oder Umlaute bekomme ich hin, nur das tauschen nicht.
Hat hier jemand Erfahrungen ob es der Dateicommander kann oder eine andere Lösung für mich?
Wenn es nur wenige Hundert Ordner und Dateien wären, hätte ich kein Problem die händisch umzubenennen. Es handelt sich hier allerdings um ca 15000 Ordner und 60000 Dateien die ich umbennen müsste.
Bin für jede Hilfestellung dankbar
Greetz
Breakball
falls der Beitrag in dieser Kategorie falsch ist, bitte in die richtige verschieben.
Stehe vor folgender Aufgabe, in einem Datenverzeichnis befinden sich die Ordner aller Aussendienstmitarbeiter und darunter die Kundenordner. Leider wurden diese und die Kundenordner, sowie die dazugehörigen Dateien alle nach dem Schema "Vorname Nachname" erstellt.
Durch eine komplette Umstrukturierung der Systemlandschaft mit Modernisierung der Hardware soll hier eine neue Namenskonvention Einzug halten.
Leerzeichen und/oder Umlaute ersetzen kann ich mit dem Dateicommander problemlos. Problematisch wird es Ordner und Dateinamen die mit "Vorname Nachname" bzw. "Vorname Nachname datei xyz.abc" gespeichert wurden in "Nachname_Vorname" bzw. "Nachname_Vorname_datei_xyz.abc" umzubenennen. Wie gesagt, Leerzeichen und/oder Umlaute bekomme ich hin, nur das tauschen nicht.
Hat hier jemand Erfahrungen ob es der Dateicommander kann oder eine andere Lösung für mich?
Wenn es nur wenige Hundert Ordner und Dateien wären, hätte ich kein Problem die händisch umzubenennen. Es handelt sich hier allerdings um ca 15000 Ordner und 60000 Dateien die ich umbennen müsste.
Bin für jede Hilfestellung dankbar
Greetz
Breakball
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 643477
Url: https://administrator.de/contentid/643477
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
19 Kommentare
Neuester Kommentar
Hallo,
https://www.bulkrenameutility.co.uk/
Gruß,
Peter
Zitat von @breakball:
falls der Beitrag in dieser Kategorie falsch ist, bitte in die richtige verschieben.
Das kannst du selbst. Aber da du die Kategorie Microsoft gewählt hast, wo kommt in deiner Frage Microsoft vor?falls der Beitrag in dieser Kategorie falsch ist, bitte in die richtige verschieben.
Bin für jede Hilfestellung dankbar
Batch? PowerShell? Bash? Perl?VB bzw. VBA? oder welche Skriptsprache du auch immer beherrscht bzw. bevorzugst bzw. auf welches OS (Apple, Linux, Windows, DOS etc.) du es willst.https://www.bulkrenameutility.co.uk/
Gruß,
Peter
Hi,
wie soll denn ein automatismus erkennen was ein Vor- und ein Nachname ist? Das tauschen ansich ist kein Problem, aber es würde dann ja auch die richtigen Werte umdrehen
Praktikant oder Strafarbeit für nen Azubi
wie soll denn ein automatismus erkennen was ein Vor- und ein Nachname ist? Das tauschen ansich ist kein Problem, aber es würde dann ja auch die richtigen Werte umdrehen
Zitat von @Pjordorf:
Batch? PowerShell? Bash? Perl?VB bzw. VBA? oder welche Skriptsprache du auch immer beherrscht bzw. bevorzugst bzw. auf welches OS (Apple, Linux, Windows, DOS etc.) du es willst.
https://www.bulkrenameutility.co.uk/
Gruß,
Peter
Batch? PowerShell? Bash? Perl?VB bzw. VBA? oder welche Skriptsprache du auch immer beherrscht bzw. bevorzugst bzw. auf welches OS (Apple, Linux, Windows, DOS etc.) du es willst.
https://www.bulkrenameutility.co.uk/
Gruß,
Peter
Praktikant oder Strafarbeit für nen Azubi
Das muss er nach dieser Aussage nicht
Stimmt du hast recht. Habe ich irgenwie überlesen.Dann mach ich es mal ausführlich weil mir grade danach ist:
Zuerst würde ich mir alle Ordner in ein Array holen. Das machst du mit:
$Alle_Ordner=Get-ChildItem c:\Temp -directory
Und dann ist es recht einfach. Dann trennst du (in meinem Beispiel) Vornamen und Nachnamen anhand des Leerzeichens im Array auf. Dann hast du an erster Stelle im neuen Array den Vornamen und an zweiter Stelle den Nachnamem. Dann setzt du setzt du den neuen Namen zusammen indem du in eine Variable erstellst indem du das Array Rückwärts zusammenfügstr. Zuletzt ersetzt du den aktuellen Namen durch den neuen Namen
foreach ($Ordner in $Alle_Ordner)
{
$Split_name=$Ordner.Name -split ' '
$neuer_name=$split_name[1]+" "+$split_name
Rename-Item c:\Temp\$Ordner c:\Temp\$neuer_name
}
Das klappt mit Ordnern wunderbar, sofern nur 2 Objekte im neuen Array sind. Mit Dateinamen wird es auf Grund des Dateitypes etwas kniffeliger und bei 3 Objekte, wenn der Kunde zum Beispiel "Frau Lieschen Müller" heißt, klappt die Lösung auch nicht, aber mit der Struktur und den Befehlen (und etwas Grips ) solltest du es für mehrteilige Ordnernamen und auf dür Dateinamen anpassen können.
Gute Nacht
Doskias
Zitat von @breakball:
Problematisch wird es Ordner und Dateinamen die mit "Vorname Nachname" bzw. "Vorname Nachname datei xyz.abc" gespeichert wurden in "Nachname_Vorname" bzw. "Nachname_Vorname_datei_xyz.abc" umzubenennen.
Problematisch wird es Ordner und Dateinamen die mit "Vorname Nachname" bzw. "Vorname Nachname datei xyz.abc" gespeichert wurden in "Nachname_Vorname" bzw. "Nachname_Vorname_datei_xyz.abc" umzubenennen.
Du könntest den Name bei " " (also Leerzeichen) teilen, das erste Element als Vorname, das zweite als Nachname setzen. Dann gegebenenfalls alles was danach kommt noch an die Zeichenkette anfügen, aber mit _ statt " " dazwischen.
Max Muster.txt würde so zu Max_Muster.txt
Max Muster wichtige Daten.txt mit dem Zusatz zu Max_Muster_wichtige_Daten.txt
Mit dem Zusatz vom Rest des Dateinamens könntest du Probleme umgehen, die durch z.B: zweite Vornamen oder ähnliches entstehen. Ohne den Zusatz könnte es sonst Probleme geben, wenn die Datei z.B. "Max Peter Muster.txt" heißt. Dann würde diese Datei zu "Max_Peter.txt" statt "Max_Peter_Muster.txt".
Das lässt sich mit überaschaubarem Aufwand mit einem Skript lösen. Ist die Frage, was für dich und deine Umgebung in Frage kommt: Bash, muss es PowerShell sein, vllt auch Python?
Was ich auf jeden Fall zusätzlich machen würde ist, ein Protokoll anzulegen, in dem Alter-Name -> Neuer-Name steht. Falls aus irgend einem Grund nachher irgend welche Probleme auftreten (was bei so großen Datenmengen durchaus passieren kann), ist es nachvollziehbar.
Moin,
Gruß jokari
Dein durchaus gutes und knackiges Script hinkt, wenn es Doppelnamen gibt:
https://tio.run/##tY5BS8NAFITv@RVDCGyLbkD7A0QpXmx78Ko2rOlLs7jJhre7tlD72@ ...
@Doskias
So die Theorie...
Gruß
em-pie
Zitat von @147323:
https://tio.run/##tY7NisJAEITveYomBEbRCawvIIp48ecFdtcwjh0TnGSkp2cVXJ89jp ...Gruß jokari
https://tio.run/##tY5BS8NAFITv@RVDCGyLbkD7A0QpXmx78Ko2rOlLs7jJhre7tlD72@ ...
@Doskias
Das klappt mit Ordnern wunderbar, sofern nur 2 Objekte im neuen Array sind. Mit Dateinamen wird es auf Grund des Dateitypes etwas kniffeliger und bei 3 Objekte, wenn der Kunde zum Beispiel "Frau Lieschen Müller" heißt, klappt die Lösung auch nicht, aber mit der Struktur und den Befehlen (und etwas Grips ) solltest du es für mehrteilige Ordnernamen und auf dür Dateinamen anpassen können.
Wenn garantiert ist, dass die Ordner nur aus Namen bestehen, könnte man den Nachnamen mit einem $Split_name[$Split_name.Count] ermitteln, zuvour dann alles, was nicht der Nachname ist, verketten und abschließend das letzte Array-Element mit dem zuvor verketten wieder zusammen fügen.So die Theorie...
Gruß
em-pie
Das war auch extra von mir so nicht vorgesehen, denn das klappt auch nur wenn die Namen vom Rest mit einem eindeutigen Trennzeichen (kei Leerzeichen) voneinander getrennt sind, zusätzlich müsste man dann mit einer generischen Liste von Vornamen einen Abgleich machen damit Vorname und Nachname eindeutig unterschieden werden können. Aber auch hier kann es Probleme geben denn z.B. kann der Name "Axel" auch ein Nachname oder ein Teil davon sein (schon gehört).
Es kommt wie immer darauf an wie derjenige hier gedacht hat oder ob er Doppelnamen immer mit Bindestrich verbunden hätte. Aber das sind alles reine Spekulationen. Für ein paar Ausnahmen lassen sich ja auch separate Rezepte kombinieren bei einem einmaligen Vorgang.
Wenn garantiert ist, dass die Ordner nur aus Namen bestehen, könnte man den Nachnamen mit einem $Split_name[$Split_name.Count] ermitteln, zuvour dann alles, was nicht der Nachname ist, verketten und abschließend das letzte Array-Element mit dem zuvor verketten wieder zusammen fügen.
Ja "wenn", aber auch das hinkt weil die Namen einerseits zum den Vornamen gehören könnten aber durchaus zu einem mehrteiligen Nachnamen.Es kommt wie immer darauf an wie derjenige hier gedacht hat oder ob er Doppelnamen immer mit Bindestrich verbunden hätte. Aber das sind alles reine Spekulationen. Für ein paar Ausnahmen lassen sich ja auch separate Rezepte kombinieren bei einem einmaligen Vorgang.
Hi!
Liegt dem Ganzen eine AD-Struktur zugrunde oder dürfen die User selbst entscheiden wie sie einen Ordner / Datei benennen?
Gibt es User-Shares oder ist das irgendwo ein Sammelordner mit Schreibrechten?
Wenn jeweils 2teres, hast du mAn schlechte Karten. In dem Fall würde eventuell eine Liste mit den gültigen Namen und ein Vergleich mit Regex helfen. Ein Gewisser Unsicherheitsfaktor bleibt aber.
Wenn 1teres könntest du die richtigen Namen aus dem AD lesen und anhand der Datei-Attribute erkennen wem der Ordner / die Datei gehört und diese so umbenennen.
Grüße!
Liegt dem Ganzen eine AD-Struktur zugrunde oder dürfen die User selbst entscheiden wie sie einen Ordner / Datei benennen?
Gibt es User-Shares oder ist das irgendwo ein Sammelordner mit Schreibrechten?
Wenn jeweils 2teres, hast du mAn schlechte Karten. In dem Fall würde eventuell eine Liste mit den gültigen Namen und ein Vergleich mit Regex helfen. Ein Gewisser Unsicherheitsfaktor bleibt aber.
Wenn 1teres könntest du die richtigen Namen aus dem AD lesen und anhand der Datei-Attribute erkennen wem der Ordner / die Datei gehört und diese so umbenennen.
Grüße!
Zitat von @mayho33:
Hi!
Liegt dem Ganzen eine AD-Struktur zugrunde oder dürfen die User selbst entscheiden wie sie einen Ordner / Datei benennen?
Hi!
Liegt dem Ganzen eine AD-Struktur zugrunde oder dürfen die User selbst entscheiden wie sie einen Ordner / Datei benennen?
Bei der Aussage des TOs eher unwahrscheinlich
in einem Datenverzeichnis befinden sich die Ordner aller Aussendienstmitarbeiter und darunter die Kundenordner.
Zitat von @147323:
Bei der Aussage des TOs eher unwahrscheinlich
Zitat von @mayho33:
Hi!
Liegt dem Ganzen eine AD-Struktur zugrunde oder dürfen die User selbst entscheiden wie sie einen Ordner / Datei benennen?
Hi!
Liegt dem Ganzen eine AD-Struktur zugrunde oder dürfen die User selbst entscheiden wie sie einen Ordner / Datei benennen?
Bei der Aussage des TOs eher unwahrscheinlich
in einem Datenverzeichnis befinden sich die Ordner aller Aussendienstmitarbeiter und darunter die Kundenordner.
Da gebe ich dir leider recht. Hätte ja sein können, dass sich der TO nur unklar ausdrückt. Schreibfehler inklusive bei der Variante ;-(
Moin
Beim Ordner mag es ja noch gehen, aber er schreibt dann ja auch von Dateien, die dann
Gruß
Doskias
Zitat von @em-pie:
@Doskias
@Doskias
Das klappt mit Ordnern wunderbar, sofern nur 2 Objekte im neuen Array sind. Mit Dateinamen wird es auf Grund des Dateitypes etwas kniffeliger und bei 3 Objekte, wenn der Kunde zum Beispiel "Frau Lieschen Müller" heißt, klappt die Lösung auch nicht, aber mit der Struktur und den Befehlen (und etwas Grips ) solltest du es für mehrteilige Ordnernamen und auf dür Dateinamen anpassen können.
Wenn garantiert ist, dass die Ordner nur aus Namen bestehen, könnte man den Nachnamen mit einem $Split_name[$Split_name.Count] ermitteln, zuvour dann alles, was nicht der Nachname ist, verketten und abschließend das letzte Array-Element mit dem zuvor verketten wieder zusammen fügen.Beim Ordner mag es ja noch gehen, aber er schreibt dann ja auch von Dateien, die dann
Vorname Nachname datei xyz.abc
lauten. Deswegen ja der Hinweis mit dem Grips. Das mit dem Count stimmt natürlich, aber ich wollte ihm auch noch etwas raum schaffen um selbst google zu fragen, wie man die Anzahl einer Objekte im Array zählen kann, falls er es nicht weiß. In wie weit das Skript ihm wirklich hilft kann nur er sagen, aber man sollte auf den 6 Zeilen von mir aufbauen können.So die Theorie...
Ach ja die lieb Theorie. In der Theorie gewinnt Bayern München auch gegen Holstein Kiel. Da wir den genauen Aufbaue nicht wissen, können wir nur raten. Wenn von den 15.000 Ordnern, lediglich 10 aus drei Teilen bestehen, dann würde ich die 3 händisch korrigieren. Wenn von den 15.000 Ordnern 14.000 aus mehr als 2 Teilen bestehen, dann wäre es auch mir zu viel händische Korrekturarbeit.Gruß
Doskias
Weiteres Script findest du auch in meinem Link oben, falls übersehen...