Viele Dateinamen übertragen

Schpedsi

Redakteur
Teammitglied
Registriert
Feb. 2006
Beiträge
1.521
Hallo, ich habe folgendes Problem:
Ich habe eine ellenlange Liste von Videos in einem Ordner. Die Videos sind alle in mühsamer Handarbeit von mir korrekt benannt worden. Aber da die Videos eine sehr geringe Auflösung haben, habe ich alle in besserer Qualität neu erstellt. Jetzt sind sie aber nicht mehr richtig benannt. So viel zur Ausgangssituation.

Nun habe ich das Problem, dass ich die neuen Videos allesamt wieder richtig benennen will. Da das eine Menge Arbeit ist, würde ich gerne die Namen von den alten Dateien auf die neuen übertragen. Gibt es da eine Möglichkeit? Für die meisten Umbenennungsarbeiten die ich sonst mache, nutze ich das Programm Joe. Aber ich habe bisher nicht herausgefunden ob und wenn ja, wie das funktioniert.

Um das Ganze etwas anschaulicher zu machen:

Ordner A:
Datei 1
Datei 2
Datei 3
Datei 4
Datei 5

Ordner B:

Video 1
Video 2
Video 3
Video 4
Video 5


Jetzt möchte ich alle Dateinamen von Ordner A (Datei 1-5), auf die Dateien in Ordner B übertragen, so dass in Ordner B auch alle Datei 1, Datei 2,... etc. heißen.
 
Zuletzt bearbeitet:
Mir fällt da gerade nur Mp3tag ein. Damit könntest du die Tags zwischen den Dateien kopieren, falls du welche eingegeben hast.
Bei den Dateinamen wäre es einfacher, folgendes zu machen:
  1. 2 Win Explorer Fesnter öffnen (1 davon alte, das andere mit den neuen Dateien).
  2. Auf die alte Datei klicken, auf 'F2' drücken, dann auf Strg + c drücken. Mit der Eingabetaste bestätigen.
  3. Auf die neue Datei klicken, auf 'F2' drücken, dann Strg + V drücken. Wieder mit der Eingabetaste bestätigen.
  4. Wiederholen mit allen Dateien.

Anmerkung:
Falls du eine entsprechende Tastatur oder Software besitzt, kannst du auch einfach ein Makro aufzeichnen, dann geht's richtig schnell.
 
Also Tags gibt es keine, geht wirklich nur um die Dateinamen. Klar kann ich jeden einzeln kopieren, aber das ist bei über 500 Dateien eine sehr undankbare Arbeit. Daher fragte ich ja nach einfacheren Lösungen.

Wie funktioniert das denn mit einem Makro? Habe eine Logitech Media 600 Tastatur.
 
Du könntest den ersten Schritt "'F2' drücken, dann auf Strg + c drücken. Mit der Eingabetaste bestätigen." und den zweiten Schritt " auf 'F2' drücken, dann Strg + V drücken. Wieder mit der Eingabetaste bestätigen." so vereinfachen, dass du dafür jeweils nur eine beliebige, zuvor darauf programmierte Taste drücken musst. Also zB.
  1. Auf alte Datei klicken und auf F8 drücken
  2. Auf neue Datei klicken und auf F9 drücken.
  3. Wiederholen

F8 und F9 würden sich gut dafür anbieten, da sie normalerweise frei sind.
Wie das mit den Makros bei deiner Tastatur jetzt genau funktioniert müsstest du jedoch einen anderen User fragen, denn da bin ich leider überfragt.

Bei 500 Dateien würde das halt trotzdem 2000 Tastenanschläge erfordern. :hammer_alt:

Wie sind denn die Dateien angeordnet bzw. benannt? Denn eine Software könnte die Dateien ja nur gleich benennen, wenn ein Wert, wie zB. die Erstellungsreihenfolge, die Änderungsreihenfolge, die Alphabet-Sortierungsreihenfolge, ... identisch ist.

Sonst müsstest du trotzdem jeder alten Datei eine neue zuordnen.
 
Das mit dem Makro ist schonmal eine gute Idee, allerdings trotzdem noch viel Arbeit wie du richtig sagtest. Das ist dann meine Notlösung ;)

Die Dateien sind immer gleich angeordnet. Also das erste Video in Ordner A ist auch das erste Video in Ordner B. Das zweite Video in Ordner A ist auch das zweite Video in Ordner B, usw.
 
So was wäre doch was leichtes in VBA oder AutoIt um zusetzten.
Hab morgen in der früh ne Abgabe, sonst würde ich da was schnell schreiben. Aber wenn es morgen noch nicht gelöst ist und Interesse besteht schreibe ich morgen schnell ein Skript.
 
Hi,

also in Ordner 1 und in Ordner 2 sind genau gleich viele Dateien?
Für den Fall habe ich dir kurz ein Script mit AutoIt geschrieben:

Code:
#include <File.au3>
#include <Array.au3>

Local $sourcedir = "d:\test1\"
Local $destdir = "d:\test2\"
Local $FileListsourcedir = _FileListToArray($sourcedir)
Local $FileListdestdir = _FileListToArray($destdir)

If @error = 1 Then
    MsgBox(0, "", "No Folders Found.")
    Exit
EndIf
If @error = 4 Then
    MsgBox(0, "", "No Files Found.")
    Exit
EndIf

for $counter = 1 to $FileListsourcedir[0] Step 1
	FileMove($destdir & $FileListdestdir[$counter], $destdir & $FileListsourcedir[$counter])
Next

Einfach AutoIt herunterladen und installieren: Download

Anschließend in einem Ordner rechte Maustaste --> Neu --> AutoIt v3 Script.

Dort kopierst du dann den Quellcode von oben rein.
Du musst dann nur noch deine Quell- und Zielordner angeben bei

Code:
Local $sourcedir = "d:\test1\"
Local $destdir = "d:\test2\"

Bitte das Format auch genau so lassen, also nach dem Ordnernamen den \ lassen.
Anschließend speicherst du das Skript und drückst die F5-Taste um das Skript laufen zu lassen.

Gruß
Fr4g3r
 
Zuletzt bearbeitet:
Frei nach Fr4g3r, aber selbsterklärend:
Code:
#include <File.au3>
#include <Array.au3>

Local $sourcedir
Local $destdir

$sourcedir = FileSelectFolder("Verzeichnis wählen, aus denen die Datei-Namen übernommen werden sollen:", "", 2)
Local $FileListsourcedir = _FileListToArray($sourcedir)
If @error = 1 Then
    MsgBox(0, "", "No Folders Found.")
    Exit
EndIf
If @error = 4 Then
    MsgBox(0, "", "No Files Found.")
    Exit
EndIf

$destdir = FileSelectFolder("Verzeichnis wählen, in denen die Dateien umbennant werden sollen:", "", 2)
Local $FileListdestdir = _FileListToArray($destdir)
If @error = 1 Then
    MsgBox(0, "", "No Folders Found.")
    Exit
EndIf
If @error = 4 Then
    MsgBox(0, "", "No Files Found.")
    Exit
EndIf
    
for $counter = 1 to $FileListsourcedir[0]
    FileMove($destdir & "\" & $FileListdestdir[$counter], $destdir & "\" & $FileListsourcedir[$counter], 1)
Next

MsgBox(0, "Umbennen", "Fertig")
Oder im Anhang als exe und au3-Datei.
 

Anhänge

Fr4g3r schrieb:
Hi,

also in Ordner 1 und in Ordner 2 sind genau gleich viele Dateien?

Genau, gleiche Anzahl und gleiche Reihenfolge.

Ich komme heute Abend nicht mehr dazu, aber morgen werde ich eure Skripts mal ausprobieren. Schonmal vielen herzlichen Dank für alle Lösungsvorschläge, besonders für die Skripts! Wenn das hinhaut, habt ihr mir echt wahnsinnig geholfen. :)
Ergänzung ()

So, in der ersten Sekunde hätte ich fast einen Jubelschrei losgelassen, weil ich dachte es hat wunderbar geklappt. Leider hat es das nicht.


Die Dateien in beiden Ordnern heißen jetzt zwar gleich, allerdings stimmt es nur bei Video 1. Alle anderen Videos haben willkürlich die Namen aus der Quelle zugeteilt bekommen. Das heißt scheinbar wurde nicht die alphabetische Reihenfolge verwendet. Ich versuche gerade herauszufinden welche Reihenfolge stattdessen.
 
Zuletzt bearbeitet:
Das problem hättest du mit TotalCommander viel einfacher erledigen können.

1. quell dateien markieren
2. menü "markieren"->"kopiere markierte namen in die zwischenablage"
3. notepad staren, einfügen und datei speichern (zb als namen.txt)
4. neue dateien markieren
5. menü "dateien"->"mehrfach umbenenn tool"
6. relativ weit rechts ist ein "?" button und darunter ein weiterer button und auf den klickste drauf
7. dann "Namen aus datei laden" und wählst die zuvor erstelle namen.txt aus
8. dann kontrollieren "alter name"<->"neuer name" und unten auf "Start" klicken
9. fertig
 
Also ich habe den Datensalat entwirren können und bin jetzt zumindest wieder auf Anfang. Fr4g3r hat mir per PN ein paar weitere Skripts zugeschickt, die ich ausprobieren werde.

An Phantom: Danke für deinen Lösungsvorschlag mit TotalCommander, so in etwa hatte ich mir das auch gedacht. Aber ich hatte keine Idee, welches Programm dafür geeignet ist. Werde ich ebenfalls heute Abend ausprobieren und dann berichten.


Bin ich froh, wenn ich das hinter mir habe ;)
 
Ich lese übrigens immer noch mit...

Falls einer der neuen Skripts von Fr4g3r gut funktioniert, poste diesen doch, falls er es erlaubt, bitte im Forum, damit auch andere User darauf zugreifen können. ;)
 
Ja, die Idee hatten wir auch. Aber erst teste ich den Skript heute (oder morgen) Abend. Wenn alles klappt, wird Fr4g3r den ersten Skript durch den neuen ersetzen. Genauso werde ich die TotalCommander Variante ausprobieren.
Ergänzung ()

So, gute Nachrichten!

Sowohl das oben gepostete Skript, wie auch die "TotalCommander"-Variante funktionieren (theoretisch geht es sogar mit meinem Stammprogramm "Joe"). Der Fehler lag an der Benennung meiner Ziel-Dateien. Die habe ich der Einfachheit halber automatisch von (1) bis (500) benennen lassen. In Windows wurde mir zwar die numerische Reihenfolge richtig angezeigt, aber die Programme haben so geordnet:

(1)
(10)
(100)
(101)
(102)
(103)
(104)
(105)
(106)
(107)
(108)
(109)
(11)
(110)
usw. usw.

Daher stimmte nichts mehr und ich hatte meinen Datensalat. Um dieses Problem zu umgehen, habe ich einfach alle Videos ab 100 automatisch nummerieren lassen. Da nun alle Zahlen 3 Stellen hatten, wurde korrekt gezählt und ich konnte alle Dateien problemlos umbenennen.

Fr4g3r hat sogar noch ein paar nützliche Skripts mehr für mich geschrieben, vielleicht lädt er sie in diesem Thema noch hoch.


Nochmals: Vielen Dank an alle Helfer!! Ihr habt mir echt eine Menge Zeit und Arbeit erspart! :)
 
Dann mache ich das mal stellvertretend. Das ist der Code (von Fr4g3r) für die automatische Umbenennung nach Erstellungsdatum:

Code:
#Include <File.au3>
#Include <Array.au3>

; 1. Pfade angeben
Local $sourcedir = "d:\Test1\"
Local $destdir = "d:\Test2\"

; 2. File Array einlesen
local $FileListsourcedir = _filelisttoArray($sourcedir,"*",1) ; normale alphabetisch sortierte Liste

local $FileListdestdir = _filelisttoArray($destdir,"*",1) ; normale alphabetisch sortierte Liste

; 3. 2D Array erstellen
local $FileListsourcedir2d[$FileListsourcedir[0]][2] ; 2D Array
for $i=1 to $FileListsourcedir[0]
    $FileListsourcedir2d[$i-1][0] = $FileListsourcedir[$i]
    $FileListsourcedir2d[$i-1][1] = FileGetTime ($sourcedir & $FileListsourcedir[$i] , 1 , 1 ) ; ggf. den 2. Parameter ändern wenn ein anderes Datum erwünscht ist
next

local $FileListdestdir2d[$FileListdestdir[0]][2] ; 2D Array
for $i=1 to $FileListdestdir[0]
    $FileListdestdir2d[$i-1][0] = $FileListdestdir[$i]
    $FileListdestdir2d[$i-1][1] = FileGetTime ($destdir & $FileListdestdir[$i] , 1 , 1 ) ; ggf. den 2. Parameter ändern wenn ein anderes Datum erwünscht ist
next

; 4. 2D Array nach Datum sortieren:
_ArraySort($FileListsourcedir2d, 0, 0, 0, 1) ; Sortiert aufsteigend nach Datum

_ArraySort($FileListdestdir2d, 0, 0, 0, 1) ; Sortiert aufsteigend nach Datum

If MsgBox(1,"Starte Umbennennung", "Umbenennung starten?") = 1 Then
for $counter = 0 to $FileListsourcedir[0]-1 Step 1
FileMove($destdir & $FileListdestdir2d[$counter][0], $destdir & $FileListsourcedir2d[$counter][0])
Next
EndIf
 
Zuletzt bearbeitet:
Hi zusammen,

sorry, hatte verschlafen den Code zu posten :-)
Danke das du es übernommen hast Schpedsi.

Wie Schpedsi es schon richtig gesagt hat, lag das ursprüngliche Problem an der Sortierung von Windows.
Rein alphabetisch kommt einfach Datei 11 vor Datei 2, zumindest wenn man es nicht Datei 02 nennt.
Windows sortiert hier aber nicht strikt alphabetisch, was nicht weiter schlimm ist, man muss es nur wissen.
Generell funktioniert somit auch das erste Skript, man muss nur die Dateien richtig benannt haben.

Gruß
 
Zurück
Oben