Batch - Alle Dateien umbenennen
Hallo Kollegen, ich stehe im Moment tierisch auf dem Schlauch dabei will ich etwas ganz einfachens machen und zwar: per Batch in einem Ordner aus allen Dateinamen alle Zahlen entfernen,
z.B. aus einem Dateinamen 123-qwer-tzui-20060514.* soll qwer-tzui.* werden.
Hoffe auf Unterstützung
z.B. aus einem Dateinamen 123-qwer-tzui-20060514.* soll qwer-tzui.* werden.
Hoffe auf Unterstützung
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 32875
Url: https://administrator.de/forum/batch-alle-dateien-umbenennen-32875.html
Ausgedruckt am: 19.05.2025 um 11:05 Uhr
3 Kommentare
Neuester Kommentar
Moin kruczie,
tja, wenn Du bei Dir standardmäßig "DelayedExpansion" eingestellt hast (so wie ich), dann macht das folgender lässig hingeworfener Oneliner vom CMD-Prompt aus:
...wobei das @echo natürlich nur zur Demo ist.
Als Batch und mit ein paar Zeilenumbrüchen sieht das so aus (auch hier das ECHO löschen zum scharfmachen)
Hope that Helps
Biber
tja, wenn Du bei Dir standardmäßig "DelayedExpansion" eingestellt hast (so wie ich), dann macht das folgender lässig hingeworfener Oneliner vom CMD-Prompt aus:
@For /L %z in (0,1,9)do @For /f "delims=" %i in ('dir /b /A:-d ') do @(echo %~ni|findstr [%z]>nul) && Set "oldname=%~ni" && @ECHO ren "%~nxi" "!oldname:%z=!%~xi"
Als Batch und mit ein paar Zeilenumbrüchen sieht das so aus (auch hier das ECHO löschen zum scharfmachen)
::----snipp RemoveDigitsInFilename.bat
@echo off & setlocal EnableDelayedExpansion
For /L %%z in (0,1,9) do (
For /f "delims=" %%i in ('dir /b /A:-d ') do (
(echo %%~ni|findstr [%%z]>nul) && Set "oldname=%%~ni" && @echo ren "%%~nxi" "!oldname:%%z=!%%~xi"
))
::----snapp RemoveDigitsInFilename.bat
Hope that Helps
Biber
Kleiner Nachtrag....
Der Batch oben works as designed, ist aber aus zwei Gründen verbesserungswürdig.
a) strategisch
So wie die Schleifen aufgebaut sind, wird ja nicht nur jede zu entfernende Ziffer im Dateinamens-Text einzeln verarbeitet,
sondern auch jeweils einzeln mit "ren altername neuername" umbenannt.
Beispiel: "Bild_1239.jpg" wird umbenannt in "Bild_239.jpg" in "Bild_39.jpg" in "Bild_9.jpg" in "Bild_".jpg.
Was alles den Anforderungen entspricht, aber natürlich stinkelangsam ist.
In der Praxis sollten also die Ziffernentfernung aus dem Dateinamen und das tatsächliche Umbenennen in zwei Schritten erfolgen.
"Rename" erst, wenn der endgültige Name feststeht.
Das hätte auch den Vorteil, dass siche eine andere "vorletzte" Umbenennungsregel einbauen lässt,
nämlich z.B. das Entfernen aller Bindestriche bis auf einen.
(Ersetze nach der Ziffernentfernung alle "--" durch "-" oder ähnliches : %oldname:--=-%)
b) konzeptionell
Von Design her greift der Batch auch zu kurz IMHO.
Ist zwar im ersten Schritt die richtige Idee, alle Ziffern zu entfernen... und alle Ziffern kann ich wie oben mit einer FOR /L ...IN..DO-Anweisung abfackeln.
In der Praxis werden aber nicht nur Ziffern stören, sondern auch Punkte, Striche und Unterstriche, die in der Regel ja bei Datums-Stamps im Dateinamen mit verwendet werden.
Deshalb würde ich statt der FOR /L -Anweisung (die kann nur Zahlen/Ziffern verarbeiten) besser eine normale FOR-Anweisung empfehlen.
Folgendes Beispiel ersetzt dann beliebige Zeichen:
Der erste gepostete Schnipsel hätte -as designed - aus "bollerwagen-12.04.2006.txt" die Datei "bollerwagen-...txt" erzeugt.
Grüße
Biber
Der Batch oben works as designed, ist aber aus zwei Gründen verbesserungswürdig.
a) strategisch
So wie die Schleifen aufgebaut sind, wird ja nicht nur jede zu entfernende Ziffer im Dateinamens-Text einzeln verarbeitet,
sondern auch jeweils einzeln mit "ren altername neuername" umbenannt.
Beispiel: "Bild_1239.jpg" wird umbenannt in "Bild_239.jpg" in "Bild_39.jpg" in "Bild_9.jpg" in "Bild_".jpg.
Was alles den Anforderungen entspricht, aber natürlich stinkelangsam ist.
In der Praxis sollten also die Ziffernentfernung aus dem Dateinamen und das tatsächliche Umbenennen in zwei Schritten erfolgen.
"Rename" erst, wenn der endgültige Name feststeht.
Das hätte auch den Vorteil, dass siche eine andere "vorletzte" Umbenennungsregel einbauen lässt,
nämlich z.B. das Entfernen aller Bindestriche bis auf einen.
(Ersetze nach der Ziffernentfernung alle "--" durch "-" oder ähnliches : %oldname:--=-%)
b) konzeptionell
Von Design her greift der Batch auch zu kurz IMHO.
Ist zwar im ersten Schritt die richtige Idee, alle Ziffern zu entfernen... und alle Ziffern kann ich wie oben mit einer FOR /L ...IN..DO-Anweisung abfackeln.
In der Praxis werden aber nicht nur Ziffern stören, sondern auch Punkte, Striche und Unterstriche, die in der Regel ja bei Datums-Stamps im Dateinamen mit verwendet werden.
Deshalb würde ich statt der FOR /L -Anweisung (die kann nur Zahlen/Ziffern verarbeiten) besser eine normale FOR-Anweisung empfehlen.
::----snipp RemoveDigitsInFilename.bat
@echo off & setlocal EnableDelayedExpansion
For %%z in (1 2 3 4 5 6 7 8 9 0 - _ .) do (
For /f "delims=" %%i in ('dir /b /A:-d ') do (
(echo %%~ni|findstr [%%z]>nul) && Set "oldname=%%~ni" && ren "%%~nxi" "!oldname:%%z=!%%~xi"
))
::----snapp RemoveDigitsInFilename.bat
Z:\RemoveDigits>
$cmd$dir /b
bollerwagen-12.04.2006.txt
20051227weihnachtessen.jpg
Z:\RemoveDigits>
$cmd$\RemoveDigitsInFilename.bat
Z:\RemoveDigits>
$cmd$dir /b
bollerwagen.txt
weihnachtessen.jpg
Grüße
Biber