Mehrfach Umbenenn Tool: Namen aus Excel übernehmen

German support forum

Moderators: white, Hacker, Stefan2

cosmolion
Junior Member
Junior Member
Posts: 2
Joined: 2017-01-30, 16:41 UTC

Mehrfach Umbenenn Tool: Namen aus Excel übernehmen

Post by *cosmolion »

HI Leute,

ich habe eine Frage zum Mehrfach Umbenenn Tool.

Lässt sich der zu ändernde Name mit einer Tabelleninhalt aus Excel füllen?

Sprich die neuen Datenbezeichnungen werden aus einer Tabelle mittels Pfad vergeben.

Ich habe so einige Bilddaten die ich umbenennen möchte. Die Tabelleninhalte wären über einen Export schnell auszulesen. Nun sollen die Bilder die Bezeichnung der Zelle einer Spalte erhalten, ohne dass ich alles selbst abtippen muss.

Ich bitte um Hilfe. Vielen Dank.
User avatar
Lucky Joe
Member
Member
Posts: 161
Joined: 2012-07-25, 10:30 UTC

Post by *Lucky Joe »

Geht das nicht über Excel-VBA besser? Du musst ja die Zuordnung einzelner Dateien zu der richtigen Zelle innerhalb deiner Tabelle vornehmen.

Lucky Joe
User avatar
Hacker
Moderator
Moderator
Posts: 13065
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

cosmolion,
Fast ganz rechts ist so ein Zwischenablage Symbol.

HTH
Roman
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.
User avatar
Stefan2
Power Member
Power Member
Posts: 4158
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Mehrfach Umbenenn Tool MUT: MRT: rename from list Pairs Text

Post by *Stefan2 »

Hallo und willkommen, cosmolion.
cosmolion wrote:Ich bitte um Hilfe. Vielen Dank.
Mehr Details, bitte.

Handelt es sich um nur einen Ordner, bzw. können wir Ordnerweise arbeiten?
Wie liegen die neuen Dateinamen vor,.. als kompletten Pfad, oder nur als Name.Ext?
Wie stellen wir die Beziehung zu den vorhandenen Dateien her, einfach alphabetisch 1:1?
Stimmt die Anzahl der vorhandenen Dateien mit denen in der Liste überein?


Einfachstes Beispiel wäre
Track 01.ext
Track 02.ext
Track 03.ext
Track 04.ext

Mit Textdatei
1 Arkansas Queen
2 Hard To Be A City
3 Growin' Down
4 Does This Bus Stop

(Siehe Beitrag von Roman, oder detaillierter von X-Byte)



Wäre aber ein Problem bei fehlender Datei
Track 02.ext
Track 03.ext
Track 04.ext

oder falsch sortierter Liste
Arkansas Queen
Does This Bus Stop
Growin' Down
Hard To Be A City





 
cosmolion
Junior Member
Junior Member
Posts: 2
Joined: 2017-01-30, 16:41 UTC

Post by *cosmolion »

Einen wunderschönen und vielen Dank für die schnellen Antworten.

Im laufe des Tages werde ich mich dem Thema wieder genauer widmen können.

umzubenennende Dateibezeichnung

- jpg mit einem Wirrwarr an Bezeichnungen die in eine Ordnung gebracht werden müssen
- die Bezeichnung hat eine definierte Nummer die in der Exceltabelle in einer einzelnen Spalte wiederkehrt

Excel Ausgabe

- die Datei hat mehrere Informationsspalten mit getrennten Inhalten
- eigentlich müsste TC mit den Tabelleninhalten der fest definierten Nummer vergleichen und die nachfolgende Elementbezeichnung in die Bezeichnung setzen

- als Beispiel sieht das dann so aus

Vorgabebezeichnung

- 012345_ich heiße so wie ich gerade erstellt wurde

Ergebnis

- 012345_ABCD

Wobei 012345 als Platzhalter die Exceltabelle abfragen sollte, um ABCD zu erhalten. Quasi eine Zuordnungsfunktion.

Edit:
Es handelt sich um einen Ordner mit mehreren jpg Daten.
Die Ergebnisdatennamen liegen als einzelne Bezeichnung in Zellen vor.
Den Bezug herzustellen müsste über einen Art Abgleich der Zellen gehen. Die Spalte lässt sich auch in eine txt Datei verschieben, wenn das einfacher sein sollte. Die nicht vorhandenen Datenbezeichnungen lassen sich so besser selektieren und löschen um den Abgleich besser zu realisieren. Löschen ist einfacher ^^
Die Anzahl Stimmt nicht, lässt sich aber editieren.

Lucky Joe: leider kenne ich mich mit Excel-VBA nicht aus :oops:

Ich hoffe ich habe es deutlich machen können welches Problem besteht. ;)
User avatar
Stefan2
Power Member
Power Member
Posts: 4158
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

VON:
012345_ich heiße so wie ich gerade erstellt wurde.ext
ÜBER:
Nimm alles von Pos.1 bis zum ersten Unterstrich. (Oder immer die ersten 6 Stellen?)
Suche '012345' in Liste, um 'ABCD' zu erhalten
ERGEBNIS:
012345_ABCD.ext


Wie ist die (Excel-)Liste den aufgebaut?
In welcher Spalte steht '012345' und in welcher 'ABCD' ?


Das könnte man zB mit einem VBScript und dem Excel COM-Object lösen.
Die Umbenennung erfolgt dann ebenfalls über dieses Script, ohne Vorschaufunktion.
Man könnte lediglich eine einfache Debugmöglichkeit anbieten.
Oder das Ergebnis in eine Textdatei exportieren, und diese im MUT laden, dann muss aber die Datei-Liste-Beziehung exakt 1:1 sein.

Besser, wir nehmen gleich PowerShell, die bietet ein Out-Gridview an, welches man vor dem Umbennenen anzeigen könnte.

Oder AutoHotkey...


Ein Export der Excel-Spalte(n) in eine Textdatei deinerseits würde ich bevorzugen.
Hier bräuchten wir nur einen eindeutigen Trenner zwischen den Spalten.
Oder handelt es sich nur um eine Spalte. Ich versteh's immer noch nicht.

Kopier' doch mal ein paar Beispiele hier rein, damit man sich das besser vorstellen kann:

Datei 1.ext
Datei 2.ext
Datei 3.ext

-| A | B | C |
1|
2|
3|






 
User avatar
Stefan2
Power Member
Power Member
Posts: 4158
Joined: 2007-09-13, 22:20 UTC
Location: Europa

PowerShell: rename Files from Names text list, non-sorted

Post by *Stefan2 »

Mittagspause >> POC in PoSh:

Code: Select all


Original files:
123 Test.txt
234 Test.txt
567 Test.txt
678 Test.txt
890 Test.txt



zzzListe.XLS:
-| A | B -------| ----- C ---| --- D ---|
1|123|NeuerName1|
2|567|NeuerName2|
3|890|NeuerName3|
4|234|NeuerName4|
5|678|NeuerName5|
6|
7|


zzzListe.txt:
123 NeuerName1
567 NeuerName2
890 NeuerName3
234 NeuerName4
678 NeuerName5




Find first three signs of origin name in zzzListe, and take rest from line as new name:
( $N = current origin name // $P = Pattern to match // $L = list of wanted new names )

PS C:\Temp\PS> $L = gc .\zzzListe.txt
PS C:\Temp\PS> dir | %{$N=$_.Name; $P=$_.Name.Substring(0,3); $L| %{if($_ -like "$P *"){"Ren ""$N"" to ""{0}""" -f $_.Substring(4)}}}

Ren "123 Test.txt" to "NeuerName1"
Ren "234 Test.txt" to "NeuerName4"
Ren "567 Test.txt" to "NeuerName2"
Ren "678 Test.txt" to "NeuerName5"
Ren "890 Test.txt" to "NeuerName3"



-------------------------------------------
Lange Version des Kommandos:

Get-ChildItem |
 ForEach-Object # each file from DIR command
{
    $N=$PSItem.Name;
    $P=$PSItem.Name.Substring(0,3); 
    $L| # show $L content
         ForEach-Object # each line from $L
         {
            if($PSItem -like "$P *") # if line starts with pattern $P from file
                 {
                    "Ren ""$N"" to ""{0}""" -f $_.Substring(4) # perform an action
                 }
          }
}
-------------------------------------------

^^^ nur eine denkbare Möglichkeit, sicherlich geht das noch besser.


Bei Anzahl an Dateien über 10.000 Stück, müsste man (ich) wohl mal anfangen, Hashtables zu verwenden 8)



 
User avatar
Lucky Joe
Member
Member
Posts: 161
Joined: 2012-07-25, 10:30 UTC

Post by *Lucky Joe »

Für die Lösung in Excel (hoffentlich nicht Off-Topic):

Ich gehe von einer Tabelle aus, in der in Spalte A die alten Dateinamen gelistet sind und in Spalte B die dazugehörigen neuen Dateinamen. Die Tabelle enthält in Zeile 1 die entsprechenden Überschriften.
Rufe über "Extras" - "Makro" - "Visual Basic-Editor" auf (oder ALT-F11). Mach einen Doppelklick auf die dort angezeigte Tabelle, z.B. "Tabelle1" (Tabelle1)".
Füge in dem rechten Fenster (Allgemein) folgenden Code ein:

Code: Select all

Sub Umbenennen()

    Dim Bereich As Range
    Dim Zeile As Range
    Dim Path As String
    Dim AltName As String
    Dim NeuName As String
    
    Set Bereich = Range("A2:A" & Cells(65536, 1).End(xlUp).Row)
    Path = "d:\xxx\"
    
    For Each Zeile In Bereich
        AltName = Path & Zeile
        NeuName = Path & Zeile.Offset(0, 1)
        Name AltName As NeuName
    Next

End Sub
Passe den "Path" deinen Verhältnissen an (abschließenden Backslash "\" nicht vergessen!) und drücke F5 - fertig.

Viel Erfolg!
Lucky Joe
Franz Müller
Senior Member
Senior Member
Posts: 383
Joined: 2005-05-24, 10:41 UTC
Location: Wien

Post by *Franz Müller »

Ich sehe das Problem überhaupt nicht. Du kannst doch eine Excel Spalte oder einen Teil einer Spalte in die Zwischenablage kopieren und im MRT über die Funktion "Namen bearbeiten" im Editor die alten Dateinamen durch die in die Zwischenablage kopierten Exceleinträge ersetzen.
Du musst nur darauf achten, dass die Reihenfolge der neuen Namen der Reihenfolge der alten Namen im MRT entspricht.
User avatar
Stefan2
Power Member
Power Member
Posts: 4158
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

Franz Müller wrote:Du musst nur darauf achten, dass die Reihenfolge der neuen Namen der Reihenfolge der alten Namen im MRT entspricht.
Eben.

Das ist ja das Problem. Wie stellst du das sicher (bei 300 Dateien)?
Vielleicht fehlt die Einhundertzwölfte, und dann kommt alles durcheinander.
Siehe mein Beispiel vom Jan 30, 2017 20:55


Wie kannst du eine dedizierte 1:1.Beziehung herstellen, anstatt einer fehleranfälligen, stur alphabetisch sortierten Reihenfolge?
Wie hier am Jan 31, 2017 13:12, oder hier um 18:42 exemplarisch gelöst.




 
User avatar
Stefan2
Power Member
Power Member
Posts: 4158
Joined: 2007-09-13, 22:20 UTC
Location: Europa

MUT: Neuen Namen aus Liste, unsortiert, 1zu1 Beziehung

Post by *Stefan2 »

Eine dedizierte 1:1.Beziehung herstellen:


Ich habe diese Dateien (Datei 4 und 8 fehlen):
Test_01.txt
Test_02 Ölgebühr.txt
Test_03.txt
Test_05.txt
Test_06 Über Ärger.txt
Test_07.txt
Test_09 Hügellöcher.txt
Test_10.txt

(Tipp: schreib' den Dateinamen IN die Textdatei, um nach dem Umbenennen testen zu können,
ob die richtigen Dateien den gewünschten neuen Namen erhalten haben)




Ich habe diese 1:1.Beziehung in meiner zzzPairsList.txt:
Test_01.txt|Neuer Name A.txt
Test_02 Ölgebühr.txt|Neuer Name J.txt
Test_03.txt|Neuer Name G.txt
Test_04.txt|Neuer Name D.txt
Test_05.txt|Neuer Name B.txt
Test_06 Über Ärger.txt|Neuer Name F.txt
Test_07.txt|Neuer Name E.txt
Test_08.txt|Neuer Name I.txt
Test_09 Hügellöcher.txt|Neuer Name H.txt
Test_10.txt|Neuer Name C.txt




Mit dieser Batch lasse ich mir nur die neuen Namen auflisten,
für die auch wirkliche eine Datei mit dem alten Namen existiert (durch das '&&' Kommando):

zzzBatch.cmd

Code: Select all

@echo off
REM im Ordner mit den umzubenennenden Dateien ausführen!
CD %~dp0
CHCP 1252
REM "zzzPairsList.txt"-Example:    alter Name|neuer Name
SET "MyList-Input=zzzPairsList.txt"
SET "MyList-Cleaned=zzzPairsList-Bereinigt.txt"
If Exist %MyList-Cleaned% DEL %MyList-Cleaned%
FOR /F "delims=| tokens=1,2" %%A IN (%MyList-Input%) DO ( Dir /b "%%A" >NUL && ECHO %%B >> %MyList-Cleaned%)
PAUSE
GoTo :EOF



Als Ergebnis erhalte ich diese Liste (nur noch 8 neue Namen),
welche ich in MUT über 'Lade Liste aus Datei...' auswähle,
(Tipp: den Ordner mit der Namensliste im anderen Panel öffnen, damit man in MUT nicht lange danach browsen muss)
um die Vorschau des MUT nutzen zu können:

zzzPairsList-Bereinigt.txt
Neuer Name A.txt
Neuer Name J.txt
Neuer Name G.txt
Neuer Name B.txt
Neuer Name F.txt
Neuer Name E.txt
Neuer Name H.txt
Neuer Name C.txt



Ergebnis nach der Umbenennung:
Neuer Name A.txt
Neuer Name B.txt
Neuer Name C.txt
Neuer Name E.txt
Neuer Name F.txt
Neuer Name G.txt
Neuer Name H.txt
Neuer Name J.txt



 
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Post by *milo1012 »

Warum wird hier eigentlich so kompliziert gedacht?
Wenn die Beziehungen der Namens-Teile sowieso in Excel stehen, dann macht man sich halt Excel selbst zunutze*, sprich die Excel-Formelsyntax, um eine neue Spalte mit den finalen Dateinamen füllen zu lassen.
Dann brauch man kein VBA oder externe Skripte.

Beispiel:
Angenommen in Spalte B stehen die Zahlen, in Spalte C die zugehörigen Zeichenketten, dann kopiere halt alle Dateinamen aus in TCs MUT heraus erstellter Textdatei in die Zwischenablage (MUT -> Namen bearbeiten...) und füge sie dann in Spalte A ein.
Die Textdatei offen lassen.

Jetzt in Spalte D die Formel

Code: Select all

=VERKETTEN(LINKS(A1;11);SVERWEIS(LINKS(A1;11);B:C;2;WAHR);TEIL(A1;12;243))
in Zelle D1 eintragen.
Dann automatisch in alle darunterliegenden Reihen anwenden/ausfüllen, indem nach unten gezogen wird (z.B. mit der Maus das schwarze Kreuz rechts unten nach unten ziehen).

Jetzt müsste man alle neuen Dateinamen in Spalte D haben.
Jetzt nur noch die Spalte als Text kopieren und in die für das MUT noch offene Textdatei kopieren, diese schließen, die Namen anwenden, fertig.
Wird natürlich problematisch, wenn eine Zahl nicht in der Tabelle gefunden wird (#NV).


* offenbar kennen die meisten Leute Excel wohl nur als Möglichkeit, Tabellen zu füllen, haben sich aber mit den durchaus mächtigen Formeln und Funktionen nie beschäftigt, sprich Excel nie "wirklich" benutzt...
cosmolion wrote:- eigentlich müsste TC mit den Tabelleninhalten der fest definierten Nummer vergleichen und die nachfolgende Elementbezeichnung in die Bezeichnung setzen
Leichter gedacht als getan, wie du anhand der vielen Antworten siehst. Selbst wenn TC Excel-Dateien lesen könnte, woher soll er wissen, was du nun aus der Tabelle genau haben möchtest? Dazu bräuchte es eine eigene Abfragesyntax.
TC plugins: PCREsearch and RegXtract
User avatar
Stefan2
Power Member
Power Member
Posts: 4158
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

milo1012 wrote:Warum wird hier eigentlich so kompliziert gedacht?
Jetzt in Spalte D die Formel

Code: Select all

=VERKETTEN(LINKS(A1;11);SVERWEIS(LINKS(A1;11);B:C;2;WAHR);TEIL(A1;12;243))
in Zelle D1 eintragen.
Wird natürlich problematisch, wenn eine Zahl nicht in der Tabelle gefunden wird (#NV).

:D


Diese Formel ist natürlich viel unkomplizierter (nicht)


Na gut, Jedem das Seine :wink: Deine Excel-Lösung gefällt mir auch gut. Sollte auch so ähnlich mit OpenOffice funktioklappen.



 



 
User avatar
milo1012
Power Member
Power Member
Posts: 1158
Joined: 2012-02-02, 19:23 UTC

Post by *milo1012 »

Stefan2 wrote:Diese Formel ist natürlich viel unkomplizierter (nicht)
Unkompliziert heißt für mich, dass ich ohne externe Skripte auskomme, von denen ich in vielleicht ein paar Monaten nicht mehr weiß, was sie tun oder für welche Tabellen-Form sie gedacht waren. Und besonders kompliziert ist die Formel nun wirklich nicht, SVERWEIS (englisch "VLOOKUP") ist hier das, was die eigentliche Arbeit erledigt.

Und für den Fall, dass eine Zahl nicht in der Tabelle gefunden wird, kann man auch einfach eine weitere Spalte einfügen, z.B. dann in Spalte E:

Code: Select all

=WENN(ISTNV(D1);A1;D1)
Wir sollten aber vielleicht mit weiteren Lösungsvorschlägen warten und erst mal den OP zu Wort kommen lassen.
TC plugins: PCREsearch and RegXtract
User avatar
Stefan2
Power Member
Power Member
Posts: 4158
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

milo1012 wrote:
Stefan2 wrote:Diese Formel ist natürlich viel unkomplizierter (nicht)
Unkompliziert heißt für mich, dass ich ohne externe Skripte auskomme,
von denen ich in vielleicht ein paar Monaten nicht mehr weiß, was sie tun oder für welche Tabellen-Form sie gedacht waren.
Aber an deiner Formel erkennst du sofort, für was diese gedacht war?

Hier wie dort, Kommentare könnten helfen.
Wie gesagt, Jedem das Seine :wink:


Wir sollten aber vielleicht mit weiteren Lösungsvorschlägen warten und erst mal den OP zu Wort kommen lassen.
Warum? Macht auch ohne ihn Spaß. Und vielleicht kann es ein Anderer gebrauchen. (Ich zB)




 
Post Reply