Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Datennamen durch Listeinhalt umbenennen, ergänzen

Frage Entwicklung Batch & Shell

Mitglied: 115241

115241 (Level 1)

26.02.2014, aktualisiert 30.06.2014, 1092 Aufrufe, 7 Kommentare, 2 Danke

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:
01.
@echo off & setlocal enabledelayedexpansion 
02.
cls 
03.
set Liste=D:\test\Liste.txt 
04.
for /f %%i in ('dir /b a-d *.jpg') do ( 
05.
    set dn=%%~ni 
06.
    set de=%%~xi 
07.
    for /f "delims=" %%j in (%liste%) do ( 
08.
    echo !dn! %%j!de! 
09.
10.
11.
pause
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
Mitglied: bastla
LÖSUNG 26.02.2014, aktualisiert 30.06.2014
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:
01.
@echo off & setlocal 
02.
cls 
03.
set "Liste=D:\test\Liste.txt" 
04.
(for /f %%i in ('dir /b a-d *.txt') do ( 
05.
    set "Neu=" 
06.
    set /p "Neu=" 
07.
    setlocal enabledelayedexpansion 
08.
    echo ren "%%i" "%%~ni!Neu!%%~xi" 
09.
    endlocal 
10.
))<"%liste%" 
11.
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 ) ...

Grüße
bastla
Bitte warten ..
Mitglied: Endoro
27.02.2014, aktualisiert um 11:14 Uhr
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.
Bitte warten ..
Mitglied: bastla
27.02.2014 um 12:40 Uhr
@ 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
Bitte warten ..
Mitglied: Endoro
27.02.2014 um 13:23 Uhr
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.
Bitte warten ..
Mitglied: 115241
27.02.2014 um 16:15 Uhr
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?
Bitte warten ..
Mitglied: bastla
27.02.2014 um 16:55 Uhr
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
Bitte warten ..
Mitglied: 115241
27.02.2014 um 17:41 Uhr
Hallo bastla,
vielen Dank für die Erklärung
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
VB for Applications
gelöst VBA Text mit Format übertragen und Zeichen ergänzen (11)

Frage von Dau12345 zum Thema VB for Applications ...

Batch & Shell
gelöst Dateiname entsprechend einem um x-Ebenen übergeordeten Ordnernamen umbenennen (3)

Frage von Booster07 zum Thema Batch & Shell ...

Batch & Shell
Pdf Files umbenennen (7)

Frage von Sacred zum Thema Batch & Shell ...

Windows Server
gelöst WSUS SUSDB umbenennen (6)

Frage von vessev zum Thema Windows Server ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...