BATch?-Dateiumbenennung mit jeweiligem NamensPräfix aus TXT-File-Zeile abhängig vom ursprünglichen Dateiname
Die Zahlen, mit denen die ursprünglichen Dateinamen beginnen und die auf die jeweilige Zeile mit dem Namenspräfix in dem TXT-File "verweisen", sind durch einen Bindestrich vom restlichen Dateinamen getrennt.
Hallo liebe "Computer-Wissende",
ich habe MS Windows XP SP2 auf meinem MEDION-Notebook (2GHz, 1024MB-RAM) mit dem "standardmäßigen" Editor.
Noch nie habe ich im Editor eine BATch-Datei geschrieben und suche daher nach dem kompletten Code um die gleich beschriebene Aufgabe zu erledigen.
Dass ich glaube, das Problem mit einem BATch-File lösen zu können, liegt an den "Ideen aus dem Netz", die ich bisher nach Recherche zu diesem Thema gefunden habe.
DIE AUFGABE/ DAS PROBLEM:
Exakt 6.997 JPG-Bilddateien in einem Verzeichnis möchte ich umbenennen. Die Dateinamen lauten momentan "auf folgendes Schema":
001-01.jpg
001-02.jpg
001-03.jpg
001-04.jpg
001-05.jpg
001-06.jpg
001-07.jpg
001-08.jpg
001-09.jpg
001-10.jpg
001-11.jpg
001-12.jpg
001-13.jpg
001-14.jpg
001-15.jpg
002-01.jpg
002-02.jpg
002-03.jpg
002-04.jpg
002-05.jpg
002-06.jpg
002-07.jpg
002-08.jpg
002-09.jpg
002-10.jpg
002-11.jpg
002-12.jpg
... ("usw. bis")
478-15.jpg
Zusätzlich habe ich eine Textdatei namens Namen.txt, die aus 478 Zeilen besteht, welche Einträge wie folgt enthalten:
00a831 ("Zeile 1")
01dfe3 ("Zeile 2")
024c0c ("Zeile 3")
... ("etc. bis")
ffbbb3 ("Zeile 478")
Die Zeileneinträge im TXT-File Namen.txt sind "von oben nach unten" alphabetisch sortiert und sind jeweils das Namenspräfix für die Dateiumbenennung.
Denn die dreistelligen Zahlen vor dem Bindestrich, mit denen die bisherigen Dateinamen beginnen, "verweisen" auf die jeweilige Zeile in der Textdatei Namen.txt. Diese dreistellige Zahl vor dem Bindestrich im Namen der JPG-Dateien soll durch den jeweiligen Zeileneintrag aus Namen.txt ersetzt werden.
So sollen bei der BATch-Umbenennung die Dateinamen der Bilddateien wie folgt umbenannt werden ("Dateiname vor Umbenennung -> Dateiname nach Umbenennung"):
001-01.jpg -> 00a831-01.jpg
001-02.jpg -> 00a831-02.jpg
001-03.jpg -> 00a831-03.jpg
001-04.jpg -> 00a831-04.jpg
001-05.jpg -> 00a831-05.jpg
001-06.jpg -> 00a831-06.jpg
001-07.jpg -> 00a831-07.jpg
001-08.jpg -> 00a831-08.jpg
001-09.jpg -> 00a831-09.jpg
001-10.jpg -> 00a831-10.jpg
001-11.jpg -> 00a831-11.jpg
001-12.jpg -> 00a831-12.jpg
001-13.jpg -> 00a831-13.jpg
001-14.jpg -> 00a831-14.jpg
001-15.jpg -> 00a831-15.jpg
002-01.jpg -> 01dfe3-01.jpg
002-02.jpg -> 01dfe3-02.jpg
002-03.jpg -> 01dfe3-03.jpg
002-04.jpg -> 01dfe3-04.jpg
002-05.jpg -> 01dfe3-05.jpg
002-06.jpg -> 01dfe3-06.jpg
002-07.jpg -> 01dfe3-07.jpg
002-08.jpg -> 01dfe3-08.jpg
002-09.jpg -> 01dfe3-09.jpg
002-10.jpg -> 01dfe3-10.jpg
002-11.jpg -> 01dfe3-11.jpg
002-12.jpg -> 01dfe3-12.jpg
... ("usw. bis")
478-15.jpg -> ffbbb3-15.jpg
Normaler Weise benutze ich Rename-Tools zum "schematischen Umbenennen" größerer Dateimengen. Doch ich kenne kein Rename-Tool, welches die neuen Dateinamen aus einem Textfile auslesen kann bzw. obige Aufgabe irgendwie erledigen kann. Kennt vielleicht Ihr eines?
An sich ist das von mir beschriebene Problem doch für einen Computer recht leicht zu lösen, oder?
Daher glaube ich eben, dass die Umbenennung wie beschrieben mit Hilfe einer BATch-Datei möglich ist. Doch leider habe ich, wie gesagt, noch nie eine BATch-Datei im Editor geschrieben. Darum wäre es eine große Hilfe und sehr nett, wenn mir jemand, der sowas kann, den kompletten "BATch-Code" hier posten würde (also alle Zeilen inkl. "@echo off" usw.), den ich dann "copy-pasten" könnte.
Damit meine ich, dass ich den "BATch-Code" dann in ein Editor-Fenster einfügen könnte und das ganze dann z.B. als renBAT.cmd im Ordner mit den 6.997 JPG-Bilddateien abspeichern könnte.
Doch wie führt man eine "BATch-Operation" durch? Muss ich dazu ein "DOS-Eingabefenster" öffnen und dann in das Verzeichnis mit den Bilddateien und renBAT.cmd gehen? Und wie lautet dann der "DOS-Befehl" um die Umbenennung durchzuführen?
Oder reicht vielleicht gar ein Doppelklick auf renBAT.cmd im MS Datei-Explorer?
An meinem Fragen erkennt Ihr meine mangelnde Erfahrung.^^ Deshalb wäre es natürlich super, wenn mir jemand neben dem "BATch-Code" auch ein paar erklärende Kommentare posten würde; z.B., was die einzelnen Einträge im "BATch-Code" bedeuten und bewirken.
Denn man lernt ja nie aus und diese für mich neuen Möglichkeiten interessieren mich sehr, auch um zukünftig ähnliche Probleme selbst lösen zu können!
Falls ich aber mit meiner detaillierten Frage hier zuviel erwartet haben sollte, wäre ich auch dankbar für Tipps und Links, die mir dabei helfen könnten, schnell "alleine" in das Thema "BATch-Umbenennung" rein zu kommen und den Code irgendwann selbst schreiben zu können.
Über Antwort(en) freue ich mich auf alle Fälle - Vielen Dank dafür schonmal vorab!
Gruß
Thilo
Hallo liebe "Computer-Wissende",
ich habe MS Windows XP SP2 auf meinem MEDION-Notebook (2GHz, 1024MB-RAM) mit dem "standardmäßigen" Editor.
Noch nie habe ich im Editor eine BATch-Datei geschrieben und suche daher nach dem kompletten Code um die gleich beschriebene Aufgabe zu erledigen.
Dass ich glaube, das Problem mit einem BATch-File lösen zu können, liegt an den "Ideen aus dem Netz", die ich bisher nach Recherche zu diesem Thema gefunden habe.
DIE AUFGABE/ DAS PROBLEM:
Exakt 6.997 JPG-Bilddateien in einem Verzeichnis möchte ich umbenennen. Die Dateinamen lauten momentan "auf folgendes Schema":
001-01.jpg
001-02.jpg
001-03.jpg
001-04.jpg
001-05.jpg
001-06.jpg
001-07.jpg
001-08.jpg
001-09.jpg
001-10.jpg
001-11.jpg
001-12.jpg
001-13.jpg
001-14.jpg
001-15.jpg
002-01.jpg
002-02.jpg
002-03.jpg
002-04.jpg
002-05.jpg
002-06.jpg
002-07.jpg
002-08.jpg
002-09.jpg
002-10.jpg
002-11.jpg
002-12.jpg
... ("usw. bis")
478-15.jpg
Zusätzlich habe ich eine Textdatei namens Namen.txt, die aus 478 Zeilen besteht, welche Einträge wie folgt enthalten:
00a831 ("Zeile 1")
01dfe3 ("Zeile 2")
024c0c ("Zeile 3")
... ("etc. bis")
ffbbb3 ("Zeile 478")
Die Zeileneinträge im TXT-File Namen.txt sind "von oben nach unten" alphabetisch sortiert und sind jeweils das Namenspräfix für die Dateiumbenennung.
Denn die dreistelligen Zahlen vor dem Bindestrich, mit denen die bisherigen Dateinamen beginnen, "verweisen" auf die jeweilige Zeile in der Textdatei Namen.txt. Diese dreistellige Zahl vor dem Bindestrich im Namen der JPG-Dateien soll durch den jeweiligen Zeileneintrag aus Namen.txt ersetzt werden.
So sollen bei der BATch-Umbenennung die Dateinamen der Bilddateien wie folgt umbenannt werden ("Dateiname vor Umbenennung -> Dateiname nach Umbenennung"):
001-01.jpg -> 00a831-01.jpg
001-02.jpg -> 00a831-02.jpg
001-03.jpg -> 00a831-03.jpg
001-04.jpg -> 00a831-04.jpg
001-05.jpg -> 00a831-05.jpg
001-06.jpg -> 00a831-06.jpg
001-07.jpg -> 00a831-07.jpg
001-08.jpg -> 00a831-08.jpg
001-09.jpg -> 00a831-09.jpg
001-10.jpg -> 00a831-10.jpg
001-11.jpg -> 00a831-11.jpg
001-12.jpg -> 00a831-12.jpg
001-13.jpg -> 00a831-13.jpg
001-14.jpg -> 00a831-14.jpg
001-15.jpg -> 00a831-15.jpg
002-01.jpg -> 01dfe3-01.jpg
002-02.jpg -> 01dfe3-02.jpg
002-03.jpg -> 01dfe3-03.jpg
002-04.jpg -> 01dfe3-04.jpg
002-05.jpg -> 01dfe3-05.jpg
002-06.jpg -> 01dfe3-06.jpg
002-07.jpg -> 01dfe3-07.jpg
002-08.jpg -> 01dfe3-08.jpg
002-09.jpg -> 01dfe3-09.jpg
002-10.jpg -> 01dfe3-10.jpg
002-11.jpg -> 01dfe3-11.jpg
002-12.jpg -> 01dfe3-12.jpg
... ("usw. bis")
478-15.jpg -> ffbbb3-15.jpg
Normaler Weise benutze ich Rename-Tools zum "schematischen Umbenennen" größerer Dateimengen. Doch ich kenne kein Rename-Tool, welches die neuen Dateinamen aus einem Textfile auslesen kann bzw. obige Aufgabe irgendwie erledigen kann. Kennt vielleicht Ihr eines?
An sich ist das von mir beschriebene Problem doch für einen Computer recht leicht zu lösen, oder?
Daher glaube ich eben, dass die Umbenennung wie beschrieben mit Hilfe einer BATch-Datei möglich ist. Doch leider habe ich, wie gesagt, noch nie eine BATch-Datei im Editor geschrieben. Darum wäre es eine große Hilfe und sehr nett, wenn mir jemand, der sowas kann, den kompletten "BATch-Code" hier posten würde (also alle Zeilen inkl. "@echo off" usw.), den ich dann "copy-pasten" könnte.
Damit meine ich, dass ich den "BATch-Code" dann in ein Editor-Fenster einfügen könnte und das ganze dann z.B. als renBAT.cmd im Ordner mit den 6.997 JPG-Bilddateien abspeichern könnte.
Doch wie führt man eine "BATch-Operation" durch? Muss ich dazu ein "DOS-Eingabefenster" öffnen und dann in das Verzeichnis mit den Bilddateien und renBAT.cmd gehen? Und wie lautet dann der "DOS-Befehl" um die Umbenennung durchzuführen?
Oder reicht vielleicht gar ein Doppelklick auf renBAT.cmd im MS Datei-Explorer?
An meinem Fragen erkennt Ihr meine mangelnde Erfahrung.^^ Deshalb wäre es natürlich super, wenn mir jemand neben dem "BATch-Code" auch ein paar erklärende Kommentare posten würde; z.B., was die einzelnen Einträge im "BATch-Code" bedeuten und bewirken.
Denn man lernt ja nie aus und diese für mich neuen Möglichkeiten interessieren mich sehr, auch um zukünftig ähnliche Probleme selbst lösen zu können!
Falls ich aber mit meiner detaillierten Frage hier zuviel erwartet haben sollte, wäre ich auch dankbar für Tipps und Links, die mir dabei helfen könnten, schnell "alleine" in das Thema "BATch-Umbenennung" rein zu kommen und den Code irgendwann selbst schreiben zu können.
Über Antwort(en) freue ich mich auf alle Fälle - Vielen Dank dafür schonmal vorab!
Gruß
Thilo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 61645
Url: https://administrator.de/contentid/61645
Ausgedruckt am: 25.11.2024 um 13:11 Uhr
7 Kommentare
Neuester Kommentar
für dich sollte insbesondere der for befehl interessant sein, also einfach mal im eingabefenster for /? eingeben und einlesen.
anschliessend bei unklarheiten einfach hier weiter lesen:
Batch for Runaways - Part2
Batch for Runaways - Part3
anschliessend bei unklarheiten einfach hier weiter lesen:
Batch for Runaways - Part2
Batch for Runaways - Part3
Hallo KoreaFuro und willkommen im Forum!
Der Inhalt der "renBAT.cmd" sollte so aussehen:
Auch wenn ich davon ausgehe, dass eine Sicherungskopie der fraglichen Dateien existiert, habe ich dennoch als Vorsichtsmaßnahme zunächst noch ein "echo" vor den eigentlichen "ren"-Befehl gesetzt - damit wird jeweils nur angezeigt, was der Befehl ohne das "echo" davor bewirken würde (und nach Entfernen des "echo" auch wird).
Um diese Anzeige auch lesen zu können, ist eine "pause"-Zeile enthalten, die im Ernstfall natürlich zu entfernen wäre, um einen flüssigen Ablauf ohne das Erfordernis weiterer Aktivitäten Deinerseits zu gewährleisten.
Vorzeitig beenden lässt sich der Ablauf der Batch-Datei übrigens mit der Tastenkombination "Strg"-"C" und einer nachfolgenden Bestätigung des Abbruchswunsches.
Grüße
bastla
P.S.: Die Kommentare folgen etwas später ...
Oder reicht vielleicht gar ein Doppelklick auf renBAT.cmd im MS Datei-Explorer?
Ja, wenn die "renBAT.cmd" im gleichen Ordner wie die umzubenennenden Dateien und die "Namen.txt" liegt.Der Inhalt der "renBAT.cmd" sollte so aussehen:
@echo off & setlocal
cd /d %~dp0
set /a Nr=1001
for /f %%i in (Namen.txt) do call :ProcessLine "%%i"
goto :eof
:ProcessLine
for /f "tokens=1* delims=-" %%f in ('dir /b %Nr:~-3%*.jpg') do <b>echo</b> ren %%f-%%g %~1-%%g
set /a Nr+=1
pause
Um diese Anzeige auch lesen zu können, ist eine "pause"-Zeile enthalten, die im Ernstfall natürlich zu entfernen wäre, um einen flüssigen Ablauf ohne das Erfordernis weiterer Aktivitäten Deinerseits zu gewährleisten.
Vorzeitig beenden lässt sich der Ablauf der Batch-Datei übrigens mit der Tastenkombination "Strg"-"C" und einer nachfolgenden Bestätigung des Abbruchswunsches.
Grüße
bastla
P.S.: Die Kommentare folgen etwas später ...
Hallo KoreaFuro!
Wie versprochen die erläuternden Kommentare:
Vorauseilende Anzeige des auszuführenden Befehles unterbinden und Geltungsbereich der eingesetzten Variablen mangels globaler Bedeutung auf diese BATch-Datei beschränken.
Da die BATch-Datei über den Explorer gestartet werden soll, durch Aufsuchen des die BATch-Datei (repräsentiert durch %0) enthaltenden Laufwerkes ("d" für "drive") und Ordners ("p" für "path") sicher stellen, dass die zu bearbeitenden Dateien ohne zusätzliche Angabe eines Pfades gefunden werden.
Initialisieren einer Zählervariable, deren letzte 3 Stellen als laufende Nummern der vorhandenen Dateien Verwendung finden werden - der Startwert 1001 löst das Problem der führenden Nullen.
Schleife, welche TXT-File-Zeilen einzeln aus der "Namen.txt" liest und den Inhalt der jeweiligen Zeile - aus Sicherheitsgründen in Anführungszeichen verpackt - anlässlich des Aufrufes des eigentlichen Bearbeitungsunterprogrammes selbigem übergibt.
An dieser Stelle kann der Programmablauf nach Bearbeitung der letzten gelesenen Zeile durch Sprung zur imaginären Markierung "eof" (für "end of file") beendet werden.
Kennzeichnung des Beginns des Bearbeitungsunterprogrammes für den Inhalt einer gelesenen Zeile.
Schleife, um alle mit der aktuellen Zeilennummer (= letzte 3 Stellen der Variablen %Nr% - daher mit führenden Nullen) beginnenden und auf ".jpg" endenden Dateinamen ohne entbehrliche Zusatzinformationen aufzulisten ("dir /b") sowie in die Teile ("tokens") vor und nach dem trennenden ("delimiting") "-" aufzuspalten. Die beiden Dateinamensbestandteile sind in weiterer Folge als %%f und %%g aufrufbar.
Für jede gefundene Datei wird durch "ren" der Umbenennungsprozess durchgeführt, wobei der ursprünglich vor dem "-" stehende Namensbestandteil %%f zugunsten des dem Unterprogramm als erstes (%1) Argument übergebenen Zeileninhaltes des TXT-Files verworfen wird. Der dem "-" folgende zweite Namensbestandteil (in %%g gespeichert) wird hingegen weiter verwendet. Da das "-" als Trennzeichen interpretiert wurde, ist dieses nun wieder explizit hinzuzufügen.
Die Schreibweise %~1 bewirkt das "Herausschälen" des neuen Präfixes aus den beim Aufruf des Bearbeitungsunterprogrammes hinzugefügten Anführungszeichen.
Die Funktion und Wirkungsweise des (seiner Bestimmung entsprechend nur temporär) enthaltenen "echo" wurde bereits an anderer Stelle erläutert.
Nach durchgeführter Umbenennung der zur jeweiligen Zeile gehörigen ".jpg"-Dateien kann die nächste Zeile in Angriff genommen werden - behufs dessen wird die Zeilennummer um 1 erhöht.
(Nur zu Testzwecken verwendete) Unterbrechung des Programmablaufes (bis zum Drücken einer beliebigen Taste).
Quellen: Hilfe (Aufruf aus einem "DOS-Eingabefenster" durch Anfügen von/?an den jeweiligen Befehl oder mittels help Befehl) zu ECHO, SETLOCAL, CD, CALL, SET, FOR, GOTO, DIR, REN und PAUSE.
Grüße
bastla
Wie versprochen die erläuternden Kommentare:
@echo off & setlocal
cd /d %~dp0
set /a Nr=1001
for /f %%i in (Namen.txt) do call :ProcessLine "%%i"
goto :eof
:ProcessLine
for /f "tokens=1* delims=-" %%f in ('dir /b %Nr:~-3%*.jpg') do echo ren %%f-%%g %~1-%%g
Für jede gefundene Datei wird durch "ren" der Umbenennungsprozess durchgeführt, wobei der ursprünglich vor dem "-" stehende Namensbestandteil %%f zugunsten des dem Unterprogramm als erstes (%1) Argument übergebenen Zeileninhaltes des TXT-Files verworfen wird. Der dem "-" folgende zweite Namensbestandteil (in %%g gespeichert) wird hingegen weiter verwendet. Da das "-" als Trennzeichen interpretiert wurde, ist dieses nun wieder explizit hinzuzufügen.
Die Schreibweise %~1 bewirkt das "Herausschälen" des neuen Präfixes aus den beim Aufruf des Bearbeitungsunterprogrammes hinzugefügten Anführungszeichen.
Die Funktion und Wirkungsweise des (seiner Bestimmung entsprechend nur temporär) enthaltenen "echo" wurde bereits an anderer Stelle erläutert.
set /a Nr+=1
pause
Quellen: Hilfe (Aufruf aus einem "DOS-Eingabefenster" durch Anfügen von/?an den jeweiligen Befehl oder mittels help Befehl) zu ECHO, SETLOCAL, CD, CALL, SET, FOR, GOTO, DIR, REN und PAUSE.
Grüße
bastla
Hallo KoreaFuro!
Zumindest ein Detail (Suchmuster der Dateien mit "-", also %Nr:~-3%-*.jpg) solltest Du vorweg ändern und testen - verwende dazu bitte gleich die folgende "for"-Zeile (welche auch noch einige zusätzliche Anführungszeichen enthält):
Mit dieser Zeile wird, wie vorher, nur der Befehl zum Umbenennen erstellt, dieses Mal aber in einer "Ergebnis.txt" festgehalten. Kontrolliere diese bitte nach einem ersten Durchlauf. Sollten wieder Fehler aufgetreten sein, benenne diese Datei um und führe einen weiteren Testlauf durch, um feststellen zu können, ob der Fehler reproduzierbar ist.
Grüße
bastla
Zumindest ein Detail (Suchmuster der Dateien mit "-", also %Nr:~-3%-*.jpg) solltest Du vorweg ändern und testen - verwende dazu bitte gleich die folgende "for"-Zeile (welche auch noch einige zusätzliche Anführungszeichen enthält):
for /f "tokens=1* delims=-" %%f in ('dir /b "%Nr:~-3%-*.jpg"') do echo ren "%%f-%%g" "%~1-%%g">>Ergebnis.txt
Grüße
bastla
Hallo KoreaFuro!
Ich würde nicht darauf wetten, dass es an den Anführungszeichen lag, da es ja grundsätzlich keinerlei Leerstellen in den (alten und neuen) Dateinamen geben sollte (weswegen ich auch, eigentlich im Gegensatz zu meiner üblichen Vorgangsweise, vorerst darauf verzichtet hatte). Da in den allermeisten Fällen aber keine berechtigten Einwände gegen das Setzen der Anführungszeichen vorliegen, habe ich sie nebenbei zur Sicherheit auch noch eingefügt.
Als wesentlich wahrscheinlicher erachte ich da schon die Begründung, dass das (leider erst nachträgliche) Berücksichtigen des "-" in der Dateisuchmaske zum Erfolg geführt hat: Vermutlich wurden vorher die Dateien mehrfach umbenannt, etwa nach dem Schema "030-05.jpg --> 432cb8-05.jpg --> e6ef7a-05.jpg", was durch das Suchen nach zB "432-*" dann nicht mehr passieren konnte - aber wie auch immer, es freut mich, dass Du nun doch Erfolg hattest.
Im Übrigen danke ich für Deine ausführliche Problembeschreibung und die umfangreichen Rückmeldungen.
Grüße
bastla
Ich würde nicht darauf wetten, dass es an den Anführungszeichen lag, da es ja grundsätzlich keinerlei Leerstellen in den (alten und neuen) Dateinamen geben sollte (weswegen ich auch, eigentlich im Gegensatz zu meiner üblichen Vorgangsweise, vorerst darauf verzichtet hatte). Da in den allermeisten Fällen aber keine berechtigten Einwände gegen das Setzen der Anführungszeichen vorliegen, habe ich sie nebenbei zur Sicherheit auch noch eingefügt.
Als wesentlich wahrscheinlicher erachte ich da schon die Begründung, dass das (leider erst nachträgliche) Berücksichtigen des "-" in der Dateisuchmaske zum Erfolg geführt hat: Vermutlich wurden vorher die Dateien mehrfach umbenannt, etwa nach dem Schema "030-05.jpg --> 432cb8-05.jpg --> e6ef7a-05.jpg", was durch das Suchen nach zB "432-*" dann nicht mehr passieren konnte - aber wie auch immer, es freut mich, dass Du nun doch Erfolg hattest.
Im Übrigen danke ich für Deine ausführliche Problembeschreibung und die umfangreichen Rückmeldungen.
Grüße
bastla