kruczie
Goto Top

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 face-smile

Content-Key: 32875

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

Printed on: April 19, 2024 at 22:04 o'clock

Member: Biber
Biber May 19, 2006 at 14:53:31 (UTC)
Goto Top
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:

@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"  
...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)

::----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
Member: Biber
Biber May 20, 2006 at 09:03:39 (UTC)
Goto Top
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.
::----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
Folgendes Beispiel ersetzt dann beliebige Zeichen:
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
Der erste gepostete Schnipsel hätte -as designed - aus "bollerwagen-12.04.2006.txt" die Datei "bollerwagen-...txt" erzeugt.

Grüße
Biber
Member: kruczie
kruczie May 22, 2006 at 08:11:01 (UTC)
Goto Top
Hallo Biber,

perfekt - vielen Dank dafür.