115241
Goto Top

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:
  • Weihnachtsbilder
  • Urlaubsbilder Oslo
  • Urlaubsbilder London
  • Urlaubsbilder Paris
usw. usf.


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
Das ganze funktioniert leider nicht, weil erstens alles zig mal durchläuft und wenn ich echo mit ren vertausche, da kommt Syntaxfehler face-surprise
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 face-sad

Content-Key: 231106

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

Printed on: April 20, 2024 at 00:04 o'clock

Member: bastla
Solution bastla Feb 26, 2014, updated at Jun 30, 2014 at 18:57:52 (UTC)
Goto Top
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.

"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
BTW: Durch das Einschalten der "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 face-wink) ...

Grüße
bastla
Member: Endoro
Endoro Feb 27, 2014 updated at 10:14:49 (UTC)
Goto Top
Hallo bastla,

Zitat von @bastla:

BTW: Durch das Einschalten der "delayedeExpansion" erst nach dem Einlesen des Wertes in die Variable !Neu! darf
diese 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.
Member: bastla
bastla Feb 27, 2014 at 11:40:55 (UTC)
Goto Top
@ Endoro
Bist Du sicher, dass dadurch der Wert der Variablen !Neu! betroffen wäre? Hinsichtlich der Dateinamen / Extensions hast Du natürlich Recht ...

Grüße
bastla
Member: Endoro
Endoro Feb 27, 2014 at 12:23:06 (UTC)
Goto Top
Hallo @bastla,
!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.
Mitglied: 115241
115241 Feb 27, 2014 at 15:15:54 (UTC)
Goto Top
Danke für die schnelle Hilfe und die Erklärung.

Ich hab noch eine kleine Frage und zwar verstehe ich fast alles aus deinem Code bastla, nur nicht Zeile 10, 5 und 6.

Bezieht sich Zeile 10 auf die 5te bzw. dann auf die 6te, sehe ich das richtig?
Wird per < der Inhalt der Liste.txt in die For Schleife geschrieben und mit in der neu Variable verarbeitet?
Member: bastla
bastla Feb 27, 2014 at 15:55:28 (UTC)
Goto Top
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
Mitglied: 115241
115241 Feb 27, 2014 at 16:41:58 (UTC)
Goto Top
Hallo bastla,
vielen Dank für die Erklärung face-smile