Batch File-Renamer
Hallo,
ich habe mal wieder ein Probelm.
Ich habe in einem Ordner Dateien mit folgendem Format:
Ausnahmebewilligung_NAME_NUMMER.doc
Nummer existiert nicht immer aber manchmal.
Darauß soll NAME - Ausnahmebewilligung NUMMER.doc werden.
Ich dachte schon daran den Dateinamen in eine Variable umzuwanden und dann von der Variablen nur Teile zu nehmen aber irgendwie schaff ich keinen Code.
Wichtig ist von der Änderung sollen nur Dateien welche Ausnahme*.doc heißen betroffen sein. Weiters sollte Name und nicht NAME geschrieben sein, im Moment ist es meist alles Groß.
Ich denke mit einer Batch sollte es möglich sein, ich weiß nur nicht so recht wie.
Wahrscheinlich ein Zusammenspiel von for und tokens und delim (blick ich nicht durch)
Danke!
lg mc-dy
ich habe mal wieder ein Probelm.
Ich habe in einem Ordner Dateien mit folgendem Format:
Ausnahmebewilligung_NAME_NUMMER.doc
Nummer existiert nicht immer aber manchmal.
Darauß soll NAME - Ausnahmebewilligung NUMMER.doc werden.
Ich dachte schon daran den Dateinamen in eine Variable umzuwanden und dann von der Variablen nur Teile zu nehmen aber irgendwie schaff ich keinen Code.
Wichtig ist von der Änderung sollen nur Dateien welche Ausnahme*.doc heißen betroffen sein. Weiters sollte Name und nicht NAME geschrieben sein, im Moment ist es meist alles Groß.
Ich denke mit einer Batch sollte es möglich sein, ich weiß nur nicht so recht wie.
Wahrscheinlich ein Zusammenspiel von for und tokens und delim (blick ich nicht durch)
Danke!
lg mc-dy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 182229
Url: https://administrator.de/forum/batch-file-renamer-182229.html
Ausgedruckt am: 18.05.2025 um 18:05 Uhr
7 Kommentare
Neuester Kommentar
Hallo mc-doubleyou!
Das könnte etwa so gehen:
- die Zeile 4 kannst Du ja selbst komplettieren ...
Grüße
bastla
Das könnte etwa so gehen:
@echo off & setlocal
set "Ordner=D:\Dein Ordner"
set "Maske=Ausnahme*.doc"
set "Umw=A_a B_b C_c D_d E_e"
pushd "%Ordner%"
for /f "delims=" %%i in ('dir /b "%Maske%"') do call :ProcessFile "%%i"
popd
goto :eof
:ProcessFile
set "Nr="
for /f "tokens=1-3 delims=_" %%a in ("%~n1") do set "Ausn=%%a" & set "Name=%%b" & set "Nr=%%c"
if defined Nr set "Nr= %Nr%"
set "NameKlein=%Name%"
for %%u in (%Umw%) do for /f "tokens=1-2 delims=_" %%a in ("%%u") do call set "NameKlein=%%NameKlein:%%a=%%b%%"
set "NameNeu=%Name:~,1%%NameKlein:~1%"
echo ren %1 "%NameNeu% - %Ausn%%Nr%%~x1"
goto :eof
Grüße
bastla

Servus,
nach was sieht dass denn aus?
[OT]
@ Bastla:
Vielleicht doch mal das €cho off weg lassen und ne Pause am ende reinmalen, dass gutenbergt sich besser
[/OT]
4 Keine Ahnung
04. set "Umw=A_a B_b C_c D_d E_e"
04. set "Umw=A_a B_b C_c D_d E_e"
nach was sieht dass denn aus?
- umw == ultramittelwelle?
- umw == unabhängigesMeisterwerk?
- umw == andlung?
[OT]
@ Bastla:
Vielleicht doch mal das €cho off weg lassen und ne Pause am ende reinmalen, dass gutenbergt sich besser
[/OT]
Hallo mc-doubleyou!
Wie T-Mo schon angeregt hat, einfach mal "
... dann könntest Du zB sehen, dass für jede Datei das Unterprogramm ":ProcessFile" aufgerufen wird (mit Übergabe des Dateinamens als Parameter, der dort als %1 ankommt).
In diesem Unterprogramm wird dann anhand der von Dir genannten Trennzeichen "_" der Dateiname (nur der Name, daher "%~n1") in bis zu 3 Teile zerlegt. Da es den Teil 3 nicht immer geben muss, wird dessen Vorhandensein geprüft, indem vorweg die dafür verwendete Variable gelöscht und nach der Zerlegung abgefragt wird, ob sie denn jetzt existiert. Wenn es einen Teil 3 (die "Nummer") gibt, soll dieser nach Deiner Formatvorgabe durch ein Leerzeichen getrennt an den ursprünglichen Teil 1 angefügt werden - dieses Leerzeichen wird aber nur benötigt, wenn es eben eine Nummer gibt, weswegen ich es in der Variablen gleich der Nummer voranstelle.
Da es in Batch keine Funktion zur Konvertierung von Groß- in Kleinbuchstaben gibt, musste ich etwas basteln - eine Schleife, die jeweils ein Zeichen umwandeln kann. Jetzt kommt Zeile 4 ins Spiel, da dort die Ersetzungspaare für diese Umwandlung festgelegt werden. Diese Umwandlung erfolgt unter Verwendung der Hilfsvariablen "%NameKlein%", der zunächst der Name in Originalschreibweise zugewiesen wird. Dann geht die erste Schleife in Zeile 16 alle Ersetzungspaare einzeln durch und erhält dabei jeweils die Kombination "altes Zeichen"_"neues Zeichen" in %%u, welche mithilfe der zweiten Schleife (anhand des Trennzeichens "_" - das habe ich willkürlich gewählt, vielleicht wäre es mit "=" verständlicher) in %%a (= zu ersetzendes Zeichen) und %%b (= Ersatzzeichen) aufteilt. Mit diesen beiden Zeichen (also beim ersten Durchlauf "A" und "a") wird dann in %NameKlein% ersetzt - wenn anfangs "NAME" drin stand, wird im ersten Durchlauf daraus "NaME", bei "B" bis "D" ändert sich nix, nach dem "E" ist es dann "NaMe", und wenn Du die Zeile 4 komplettierst, werden schließlich alle enthaltenen Zeichen konvertiert.
Da letztendlich in %NameKlein% "name" steht, aber der Anfangsbuchstabe groß bleiben soll, wird eben das erste Zeichen des ursprünglichen Namens (= "N") mit allem, was nach dem ersten Zeichen in %NameKlein% (= "ame") steht, zu %NameNeu% zusammengefasst.
Die Zeile 18 schließlich sorgt (durch das vorangestellte "
@t-mo: Hast ja recht ...
Grüße
bastla
[Edit] Die zwischenzeitlich gestellten Fragen sollten damit eigentlich beantwortet sein, wobei die Antwort auf die letzte davon "ja" lautet ...
[/Edit]
Wie T-Mo schon angeregt hat, einfach mal "
echo on
" verwenden und sich den Ablauf anschauen ...... dann könntest Du zB sehen, dass für jede Datei das Unterprogramm ":ProcessFile" aufgerufen wird (mit Übergabe des Dateinamens als Parameter, der dort als %1 ankommt).
In diesem Unterprogramm wird dann anhand der von Dir genannten Trennzeichen "_" der Dateiname (nur der Name, daher "%~n1") in bis zu 3 Teile zerlegt. Da es den Teil 3 nicht immer geben muss, wird dessen Vorhandensein geprüft, indem vorweg die dafür verwendete Variable gelöscht und nach der Zerlegung abgefragt wird, ob sie denn jetzt existiert. Wenn es einen Teil 3 (die "Nummer") gibt, soll dieser nach Deiner Formatvorgabe durch ein Leerzeichen getrennt an den ursprünglichen Teil 1 angefügt werden - dieses Leerzeichen wird aber nur benötigt, wenn es eben eine Nummer gibt, weswegen ich es in der Variablen gleich der Nummer voranstelle.
Da es in Batch keine Funktion zur Konvertierung von Groß- in Kleinbuchstaben gibt, musste ich etwas basteln - eine Schleife, die jeweils ein Zeichen umwandeln kann. Jetzt kommt Zeile 4 ins Spiel, da dort die Ersetzungspaare für diese Umwandlung festgelegt werden. Diese Umwandlung erfolgt unter Verwendung der Hilfsvariablen "%NameKlein%", der zunächst der Name in Originalschreibweise zugewiesen wird. Dann geht die erste Schleife in Zeile 16 alle Ersetzungspaare einzeln durch und erhält dabei jeweils die Kombination "altes Zeichen"_"neues Zeichen" in %%u, welche mithilfe der zweiten Schleife (anhand des Trennzeichens "_" - das habe ich willkürlich gewählt, vielleicht wäre es mit "=" verständlicher) in %%a (= zu ersetzendes Zeichen) und %%b (= Ersatzzeichen) aufteilt. Mit diesen beiden Zeichen (also beim ersten Durchlauf "A" und "a") wird dann in %NameKlein% ersetzt - wenn anfangs "NAME" drin stand, wird im ersten Durchlauf daraus "NaME", bei "B" bis "D" ändert sich nix, nach dem "E" ist es dann "NaMe", und wenn Du die Zeile 4 komplettierst, werden schließlich alle enthaltenen Zeichen konvertiert.
Da letztendlich in %NameKlein% "name" steht, aber der Anfangsbuchstabe groß bleiben soll, wird eben das erste Zeichen des ursprünglichen Namens (= "N") mit allem, was nach dem ersten Zeichen in %NameKlein% (= "ame") steht, zu %NameNeu% zusammengefasst.
Die Zeile 18 schließlich sorgt (durch das vorangestellte "
echo
") für die "Demo-Ausgabe" des Rename-Befehles (zu erwähnen wäre hier vielleicht noch "%~x1", was dem Dateityp des Parameters 1 - also ".doc" - entspricht. Wenn alles so aussieht, wie Du es haben willst, brauchst Du nur noch das angesprochene "echo
" entfernen, und es wird tatsächlich umbenannt.@t-mo: Hast ja recht ...
Grüße
bastla
[Edit] Die zwischenzeitlich gestellten Fragen sollten damit eigentlich beantwortet sein, wobei die Antwort auf die letzte davon "ja" lautet ...

Salue bastla,
Noe,
Wir beiden haben halt das gleiche auswahlverfahren, um herauszufinden, wie ernst es dem fragesteller mit seiner loesung und vor allem eigeninitiative ist.
Bei dir muss man halt nur den allerersten doppelbefehl kicken, bei mir braucht man einen guten kaffe und ne portion humor.
Bleib bei deinem weg, meiner eckt zu oft falsch an, aber in der richtung bin ich merkbefreit
Grüße
bastla
Retourbastla