
115241
26.02.2014, aktualisiert am 30.06.2014
Datennamen durch Listeinhalt umbenennen, ergänzen
Hallo, ich grüße alle sehr Herzlich.
Ich möchte per Batch JPG Bilder die in einem Verzeichnis liegen umbenennen, jedoch der neue Dateiname befindet sich in eine Liste.txt.
Liste.txt Inhalt:
Jetzt möchte ich diese Liste verwenden und die JPG Bilder umbenennen
aus nr blabla.jpg soll nr blabla Weihnachtsbilder.jpg
aus nr xyz.jpg soll nr xyz Urlaubsbilder Oslo.jpg
aus nr text.jpg soll nr text Urlaubsbilder London.jpg
aus nr noch ein text.jpg soll nr noch ein text Urlaubsbilder Paris.jpg
usw. usf.
Bilder und Liste.txt liegen alle in gleichen Ordner.
Mein Ansatz ist:
Das ganze funktioniert leider nicht, weil erstens alles zig mal durchläuft und wenn ich echo mit ren vertausche, da kommt Syntaxfehler 
Ich wäre noch für eine kurze Erklärung wieso das nicht läuft sehr dankbar und hoffe jemand kann bei mein kleinen Problem helfen.
Danke
ps ich hab mir andere Beiträge durch geschaut, leider komme ich nicht weiter
Ich möchte per Batch JPG Bilder die in einem Verzeichnis liegen umbenennen, jedoch der neue Dateiname befindet sich in eine Liste.txt.
Liste.txt Inhalt:
- Weihnachtsbilder
- Urlaubsbilder Oslo
- Urlaubsbilder London
- Urlaubsbilder Paris
Jetzt möchte ich diese Liste verwenden und die JPG Bilder umbenennen
aus nr blabla.jpg soll nr blabla Weihnachtsbilder.jpg
aus nr xyz.jpg soll nr xyz Urlaubsbilder Oslo.jpg
aus nr text.jpg soll nr text Urlaubsbilder London.jpg
aus nr noch ein text.jpg soll nr noch ein text Urlaubsbilder Paris.jpg
usw. usf.
Bilder und Liste.txt liegen alle in gleichen Ordner.
Mein Ansatz ist:
@echo off & setlocal enabledelayedexpansion
cls
set Liste=D:\test\Liste.txt
for /f %%i in ('dir /b a-d *.jpg') do (
set dn=%%~ni
set de=%%~xi
for /f "delims=" %%j in (%liste%) do (
echo !dn! %%j!de!
)
)
pause
Ich wäre noch für eine kurze Erklärung wieso das nicht läuft sehr dankbar und hoffe jemand kann bei mein kleinen Problem helfen.
Danke
ps ich hab mir andere Beiträge durch geschaut, leider komme ich nicht weiter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 231106
Url: https://administrator.de/forum/datennamen-durch-listeinhalt-umbenennen-ergaenzen-231106.html
Ausgedruckt am: 10.04.2025 um 00:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo entilzha und willkommen im Forum!
Das "zig mal-Durchlaufen" ergibt sich aus der Verschachtelung der Schleifen: Für jede gefundene Datei wird die gesamte Liste abgearbeitet.
"
Die Zuweisung an die Variablen !dn! und !de! ist übrigens unnötig - Du kannst einfach %%~ni und %%~xi an der passenden Stelle (also im "
Da Du vermutlich nicht nur eine Erklärung für die Ist-Situation Deines Batches suchst, noch ein Vorschlag, diese zu verbessern:
BTW: Durch das Einschalten der "
Noch ein Hinweis: Wenn die Liste zu wenig Einträge enthält, werden die verbleibenden Dateien einfach nicht umbenannt.
) ...
Grüße
bastla
Das "zig mal-Durchlaufen" ergibt sich aus der Verschachtelung der Schleifen: Für jede gefundene Datei wird die gesamte Liste abgearbeitet.
"
ren
" funktioniert nicht, weil in !dn! ja nur der Dateiname steht - auch wenn sich die Datei im aktuellen Ordner befindet und damit kein Pfad benötigt wird, muss zumindest der Typ dabei sein, um die Datei finden zu können, und dann kannst Du ganz ohne Zerlegung %%i verwenden.Die Zuweisung an die Variablen !dn! und !de! ist übrigens unnötig - Du kannst einfach %%~ni und %%~xi an der passenden Stelle (also im "
ren
"-Befehl) direkt einsetzen.Da Du vermutlich nicht nur eine Erklärung für die Ist-Situation Deines Batches suchst, noch ein Vorschlag, diese zu verbessern:
@echo off & setlocal
cls
set "Liste=D:\test\Liste.txt"
(for /f %%i in ('dir /b a-d *.txt') do (
set "Neu="
set /p "Neu="
setlocal enabledelayedexpansion
echo ren "%%i" "%%~ni!Neu!%%~xi"
endlocal
))<"%liste%"
pause
delayedeExpansion
" erst nach dem Einlesen des Wertes in die Variable !Neu! darf diese sogar eine beliebige Anzahl von "!" enthalten.Noch ein Hinweis: Wenn die Liste zu wenig Einträge enthält, werden die verbleibenden Dateien einfach nicht umbenannt.
ps ich hab mir andere Beiträge durch geschaut
Diesen aber vermutlich nicht (musste man/frau aber wohl kennen, um ihn finden zu können Grüße
bastla
Hallo bastla,
Das klappt aber nur, wenn Forschleifenparameter nicht innerhalb verzögerter Erweiterung erweitert werden. Die müssen ihre Werte zuvor an normale Variable übertragen.
Gruss, Endoro.
BTW: Durch das Einschalten der "
diese sogar eine beliebige Anzahl von "!" enthalten.
delayedeExpansion
" erst nach dem Einlesen des Wertes in die Variable !Neu! darfdiese sogar eine beliebige Anzahl von "!" enthalten.
Das klappt aber nur, wenn Forschleifenparameter nicht innerhalb verzögerter Erweiterung erweitert werden. Die müssen ihre Werte zuvor an normale Variable übertragen.
Gruss, Endoro.
Hallo @bastla,
Gruss, Endoro.
!Neu!
ist nicht betroffen, da hast du völlig recht, das hab ich missverständlich formuliert. !Neu!
wäre nicht mal betroffen, wenn die verzögerte Erweiterung zum Beginn eingeschaltet wird. Das gilt nur für Forschleifen Parameter, die ihre "!
"-Zeichen während delayed expansion verlieren.Gruss, Endoro.
Hallo entilzha!
Zeile 10 übergibt tatsächlich die Liste, sodass innerhalb der Schleife bei jedem Durchlauf ein Eintrag (durch Zeile 6) der Variablen !Neu! zugewiesen wird. Zeile 5 sorgt dafür, dass nicht, falls tasächlich einmal zu wenige Werte in der Liste stünden, immer der letzte Wert weiter verwendet würde ...
Grüße
bastla
Zeile 10 übergibt tatsächlich die Liste, sodass innerhalb der Schleife bei jedem Durchlauf ein Eintrag (durch Zeile 6) der Variablen !Neu! zugewiesen wird. Zeile 5 sorgt dafür, dass nicht, falls tasächlich einmal zu wenige Werte in der Liste stünden, immer der letzte Wert weiter verwendet würde ...
Grüße
bastla