breakball
Goto Top

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 face-smile

Greetz
Breakball

Content-Key: 643477

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

Printed on: April 26, 2024 at 17:04 o'clock

Member: Pjordorf
Pjordorf Jan 22, 2021 updated at 19:43:50 (UTC)
Goto Top
Hallo,

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?

Bin für jede Hilfestellung dankbar face-smile
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
Member: beidermachtvongreyscull
beidermachtvongreyscull Jan 22, 2021 updated at 21:06:35 (UTC)
Goto Top
Ich kenne jetzt Deine Scripting-Kenntnisse nicht.
Ich könnte aber mit Dir einen Ansatz in VBScript versuchen.

Dann gehen wir das Problem Schritt für Schritt an und schauen mal.

Also:
  • Welche Scripting-Kenntnisse hast Du?
  • Wie dringend ist das?
Member: Doskias
Doskias Jan 22, 2021 at 21:08:38 (UTC)
Goto Top
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

Zitat von @Pjordorf:
Zitat von @breakball:
Bin für jede Hilfestellung dankbar face-smile
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 face-smile
Member: beidermachtvongreyscull
beidermachtvongreyscull Jan 22, 2021 at 21:19:18 (UTC)
Goto Top
Das muss er nach dieser Aussage nicht

Leider wurden diese und die Kundenordner, sowie die dazugehörigen Dateien alle nach dem Schema "Vorname Nachname" erstellt.
Member: Doskias
Doskias Jan 22, 2021 updated at 22:41:43 (UTC)
Goto Top
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 face-smile ) solltest du es für mehrteilige Ordnernamen und auf dür Dateinamen anpassen können.

Gute Nacht
Doskias
Member: ASP.NET.Core
ASP.NET.Core Jan 23, 2021 at 09:44:42 (UTC)
Goto Top
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.

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.
Mitglied: 147323
147323 Jan 23, 2021 updated at 12:25:54 (UTC)
Goto Top
Member: em-pie
em-pie Jan 23, 2021 updated at 12:53:51 (UTC)
Goto Top
Moin,
Zitat von @147323:
https://tio.run/##tY7NisJAEITveYomBEbRCawvIIp48ecFdtcwjh0TnGSkp2cVXJ89jp ...

Gruß jokari
Dein durchaus gutes und knackiges Script hinkt, wenn es Doppelnamen gibt:
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 face-smile ) 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
Mitglied: 147323
147323 Jan 23, 2021 updated at 13:42:52 (UTC)
Goto Top
Zitat von @em-pie:
Dein durchaus gutes und knackiges Script hinkt, wenn es Doppelnamen gibt:
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).

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.
Member: mayho33
mayho33 Jan 24, 2021 at 10:35:28 (UTC)
Goto Top
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!
Mitglied: 147323
147323 Jan 24, 2021 updated at 11:46:27 (UTC)
Goto Top
Zitat von @mayho33:

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.
Member: mayho33
mayho33 Jan 24, 2021 updated at 13:22:59 (UTC)
Goto Top
Zitat von @147323:

Zitat von @mayho33:

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 ;-(
Member: Doskias
Doskias Jan 25, 2021 at 06:59:00 (UTC)
Goto Top
Moin
Zitat von @em-pie:
@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 face-smile ) 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. face-smile 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
Member: breakball
breakball Jan 25, 2021 at 07:57:20 (UTC)
Goto Top
Zitat von @Pjordorf:

Hallo,

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?

Es ist eine komplette Microsoft Umgebung, die derzeit noch mit einer NAS-Box als Daten-Laufwerk läuft. Die Infrastruktur wird komplett auf AD inkl. File-Server umgebaut.

Bin für jede Hilfestellung dankbar face-smile
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/
Habe nur geringfügige Kenntnisse mit Skriptsprachen face-sad
Member: breakball
breakball Jan 25, 2021 at 08:00:02 (UTC)
Goto Top
Zitat von @beidermachtvongreyscull:

Ich kenne jetzt Deine Scripting-Kenntnisse nicht.
Ich könnte aber mit Dir einen Ansatz in VBScript versuchen.

Dann gehen wir das Problem Schritt für Schritt an und schauen mal.

Also:
  • Welche Scripting-Kenntnisse hast Du?
  • Wie dringend ist das?
Habe nur ganz geringfügige Skriptkenntnisse face-sad
Sollte relativ zeitnah, wie fast überall, passieren.
Member: breakball
breakball Jan 25, 2021 at 08:02:58 (UTC)
Goto Top
Zitat von @Doskias:

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
Zwischen den einzelnen Teilen der Ordner- bzw. Dateinamen sind immer Leerzeichen vorhanden. Diese kann ich alle automatisiert mit dem Dateicommander gegen "_" oder andere Zeichen austauschen.
Natürlich in einer Testumgebung.
Member: breakball
breakball Jan 25, 2021 at 08:45:03 (UTC)
Goto Top
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 face-smile ) solltest du es für mehrteilige Ordnernamen und auf dür Dateinamen anpassen können.

Gute Nacht
Doskias
Danke für das Skript. Werde es in meiner Testumgebung mal laufen lassen. Allerdings muss ich zugeben von Skriptsprachen habe ich relativ wenig Ahnung. Verstehe jedoch bis zu einer gewissen Komplexität was Skripte machen. Vor vielen Jahren (mehr als 1 Jahrzent) hatte ich mehr damit zu tun, jedoch auch nur am Rande.
Member: breakball
breakball Jan 25, 2021 at 09:55:05 (UTC)
Goto Top
Danke für die bisherigen und auch hilfreichen Kommentare um dem Ziel näherzukommen.
Die Dateinamen sind im laufe der Zeit so gewachsen und keiner hat sich irgendwelche tieferen Gedanken dazu gemacht. Seit Ende letzten Jahres werden alle neuen Ordner und Dateien immer beginnend mit "Nachname_Vorname" angelegt und als Trennzeichen der "_" verwendet. Die alten Ordner und Dateien haben zu 95% die Konvention mit "Vorname Nachname" beginnend.
Ich darf jetzt das Versäumte aufarbeiten.

Noch eine kurze Erläuterung. Es findet eine Umstrukturierung der Infrastruktur statt, hier mal aufgelistet was alt (noch bestehend) und was neu ist.

Alt:
Netzwerkumgebung mit DHCP
Clientrechner mit lokalen Anmeldungen
NAS-Speicher als Netzlaufwerk, Berechtigungen auf der NAS

Neu:
Netzwerkumgebung mit DHCP
VMWare Host mit notwendigen VMs
AD-Infrastruktur
File-Server mit AD-Berechtigungskonzept
Clientrechner mit AD Anmeldungen
Sicherungskonzept VMWare-Host und Clients
QNAP-NAS als Backup mit Replizierung auf extern ausgelagerte QNAP-NAS
Mitglied: 147323
147323 Jan 25, 2021 at 10:48:23 (UTC)
Goto Top
Weiteres Script findest du auch in meinem Link oben, falls übersehen...