Batch-Datei mit FOR-Schleife zum Umbenennen von Dateien
Hallo Zusammen,
ich habe in einem Verzeichnis mehrere TIF-Dateien an die ich an den Dateinamen eine Zeichenfolge voran setzen muss.
Dazu habe ich mir eine Batchdatei geschrieben, die soweit auch funktioniert, allerdings bekomme ich immer bei einer Datei die Zeichenfolge doppelt voraus gesetzt.
Beispiel:
Dateinamen lauten: 12345678_0001.tif
Vorne an den Dateinamen sollen die Zeichen "9999-" voran gestellt werden,
also nach "9999-12345678_0001.tif" geändert werden.
die Batchdatei:
@echo off
for %%i in (*.tif) do ren %%i 9999-%%i
endlocal
)
Es werden mir alle Dateien korrekt umbenannt, lediglich eine Datei hat dann das 9999- doppelt vorne dran, also "9999-9999-12345678_0001.tif"
Könnten mir jemand bitte auf die Sprünge helfen, wo ich noch einen Fehler im Skript habe.
Besten Dank
ich habe in einem Verzeichnis mehrere TIF-Dateien an die ich an den Dateinamen eine Zeichenfolge voran setzen muss.
Dazu habe ich mir eine Batchdatei geschrieben, die soweit auch funktioniert, allerdings bekomme ich immer bei einer Datei die Zeichenfolge doppelt voraus gesetzt.
Beispiel:
Dateinamen lauten: 12345678_0001.tif
Vorne an den Dateinamen sollen die Zeichen "9999-" voran gestellt werden,
also nach "9999-12345678_0001.tif" geändert werden.
die Batchdatei:
@echo off
for %%i in (*.tif) do ren %%i 9999-%%i
endlocal
)
Es werden mir alle Dateien korrekt umbenannt, lediglich eine Datei hat dann das 9999- doppelt vorne dran, also "9999-9999-12345678_0001.tif"
Könnten mir jemand bitte auf die Sprünge helfen, wo ich noch einen Fehler im Skript habe.
Besten Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 378959
Url: https://administrator.de/forum/batch-datei-mit-for-schleife-zum-umbenennen-von-dateien-378959.html
Ausgedruckt am: 23.12.2024 um 01:12 Uhr
8 Kommentare
Neuester Kommentar
Für was das ENDLOCAL in der Schleife steht, erschließt sich mir nicht.
Dein Problem liegt in der Implementierung der (einfachen) FOR Schleife. Das kannst du grundsätzlich nicht beeinflussen. Die einzige Möglichkeit zu verhindern dass Dateien erneut gefunden und umbenannt werden, ist die Pufferung der Dateinamen. Ein DIR in einer FOR /F Schleife sollte Abhilfe schaffen.
Steffen
Dein Problem liegt in der Implementierung der (einfachen) FOR Schleife. Das kannst du grundsätzlich nicht beeinflussen. Die einzige Möglichkeit zu verhindern dass Dateien erneut gefunden und umbenannt werden, ist die Pufferung der Dateinamen. Ein DIR in einer FOR /F Schleife sollte Abhilfe schaffen.
for /f "delims=" %%i in ('dir /a-d /b *.tif') do ren "%%~i" "9999-%%~i"
Steffen
Hallo,
darf in an Eure Lösung mal anschließen? Ich hab ein ähnliches Problem und komme mit meinen Kenntnissen leider alleine nicht weiter.
Ich will jeweils eine einzelne oder mehrere selektierte Datei(en) verschiedener Formate mit vorangestelltem Datum umbenennen. Die o.g. Schleife benennt mir jedoch alles um, inkl der Batch-Datei.
Mit meinen laienhaftem Wissen habe ich mir
@echo off
ren %* "%date:~-4% %date:~-7,2% %date:~-10,2%_"
zusammengebastelt, funktioniert auch mit einer auf die Batch gezogenen Datei, jedoch wird dann der ursprüngliche Dateinamen und das Dateiformat (.pdf, .jpg, usw) gekillt.
Daraufhin habe ich versucht mit
@echo off
ren %* "%date:~-4% %date:~-7,2% %date:~-10,2%_%%~nxI"
zu arbeiten. Allerdings wird %%~nxI als reiner Text zum Dateinamen hinzugefügt. Scheinbar ist die Variable nicht definiert.
Arbeitet man hier mit "set" weiter?
Oder gibt es eine ganz andere Lösung?
Wäre echt klasse, wenn mir bitte jemand helfen könnte!
Viele Grüße,
Paulmx
darf in an Eure Lösung mal anschließen? Ich hab ein ähnliches Problem und komme mit meinen Kenntnissen leider alleine nicht weiter.
Ich will jeweils eine einzelne oder mehrere selektierte Datei(en) verschiedener Formate mit vorangestelltem Datum umbenennen. Die o.g. Schleife benennt mir jedoch alles um, inkl der Batch-Datei.
Mit meinen laienhaftem Wissen habe ich mir
@echo off
ren %* "%date:~-4% %date:~-7,2% %date:~-10,2%_"
zusammengebastelt, funktioniert auch mit einer auf die Batch gezogenen Datei, jedoch wird dann der ursprüngliche Dateinamen und das Dateiformat (.pdf, .jpg, usw) gekillt.
Daraufhin habe ich versucht mit
@echo off
ren %* "%date:~-4% %date:~-7,2% %date:~-10,2%_%%~nxI"
zu arbeiten. Allerdings wird %%~nxI als reiner Text zum Dateinamen hinzugefügt. Scheinbar ist die Variable nicht definiert.
Arbeitet man hier mit "set" weiter?
Oder gibt es eine ganz andere Lösung?
Wäre echt klasse, wenn mir bitte jemand helfen könnte!
Viele Grüße,
Paulmx
Weiß zwar nicht was das mit dem alten Topic hier zu tun hat, aber egal.
Dran denken dass bei per drag/drop auf das Script gezogenen Dateien für jede einzelne Datei der komplette Pfad in %* steht. Kommandozeilen haben aber ein Längenlimit von 8191 Zeichen. Je nachdem wie lang die Pfade sind kann es sein dass bei wenigen Dateien zusammen drauf gezogen auch schon Schluss ist.
Steffen
for %%i in (%*) do ren %%i "%date:~-4% %date:~-7,2% %date:~-10,2%_%%~nxi"
Steffen
@rubberman
Vielen Dank - da wäre ich im Leben nicht von alleine drauf gekommen!
Für meine Lernkurve:
(%*) ist dann die einzelne Datei, die ich auf die Batch ziehe? und
auch für so eine "Einzelaufgabe" legt man eine Schleife an, weil %%i in (%*) erstmal den Bezug zum originalen Dateinamen festlegt - Hab ich richtig gedacht?
Nochmals,
TausendDank!
Vielen Dank - da wäre ich im Leben nicht von alleine drauf gekommen!
Für meine Lernkurve:
(%*) ist dann die einzelne Datei, die ich auf die Batch ziehe? und
auch für so eine "Einzelaufgabe" legt man eine Schleife an, weil %%i in (%*) erstmal den Bezug zum originalen Dateinamen festlegt - Hab ich richtig gedacht?
Nochmals,
TausendDank!
Ein
Die
Steffen
echo %*
zeigt dir den Inhalt und call /?
die offizielle Erklärung.%*
ist die (leerzeichengetrennte) Liste aller Argumente die an das Script übergeben wurden. Leerzeichen in Argumenten die in Anführungszeichen gesetzt sind werden nicht als Trennzeichen angenommen.Die
for
Schleife weist jeweils eines dieser Argumente der Schleifenvariable %%i
zu. Die Modifikatoren ~nx
expandieren die Schleifenvariable zu Name und Erweiterung. Ein for /?
erklärt alle Modifikatoren.Steffen