mc-doubleyou
Goto Top

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

Content-Key: 182229

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

Ausgedruckt am: 28.03.2024 um 15:03 Uhr

Mitglied: bastla
bastla 19.03.2012 um 16:49:54 Uhr
Goto Top
Hallo mc-doubleyou!

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
- die Zeile 4 kannst Du ja selbst komplettieren ...

Grüße
bastla
Mitglied: mc-doubleyou
mc-doubleyou 19.03.2012 um 17:02:50 Uhr
Goto Top
Hallo bastla,

wie immer WOW!

Wenn ichs jetzt noch verstehen würde *gg*

1-3 Versteh ich
4 Keine Ahnung

Im Bereich vom ProcessFile steig ich dann eher wieder aus

delims bestimmt den Teiler
tokens versteh ich immer noch nicht so ganz

und ab 16 steig ich endgültig aus.

Um wie gewünscht zu adabtieren muss ich es jedoch leider erst mal verstehen.
Wäre nett wenn du deinen Code aufschlüsseln könntest.

Danke!

lg mc-dy
Mitglied: 60730
60730 19.03.2012 um 17:22:51 Uhr
Goto Top
Servus,

4 Keine Ahnung
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 face-wink
[/OT]
Mitglied: mc-doubleyou
mc-doubleyou 19.03.2012 um 19:23:00 Uhr
Goto Top
Das das Umwandlung heißt macht soweit Sinn.

Doch was wird gewandelt? Ist das der Berich NAME gegen Name? sollte also mit

A_a B_b C_c D_d E_e F_f G_g H_h I_i J_j K_k L_l M_m N_n O_o P_p Q_q R_r S_s T_t U_u V_v W_w X_x Y_y Z_z Ä_ä Ö_ö Ü_ü

gefüllt werden?

lg mc-dy
Mitglied: bastla
bastla 19.03.2012 um 19:37:13 Uhr
Goto Top
Hallo mc-doubleyou!

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

Grüße
bastla

[Edit] Die zwischenzeitlich gestellten Fragen sollten damit eigentlich beantwortet sein, wobei die Antwort auf die letzte davon "ja" lautet ... face-wink [/Edit]
Mitglied: mc-doubleyou
mc-doubleyou 19.03.2012 um 23:01:37 Uhr
Goto Top
Wow, danke!

In meinen Augen bist du Gott bastla ...

Immer wenn ich dachte ich hätte es begriffen, hab ich zig Fehler drinnen oder finde gar keinen Code, aber du wirfst den gerade zu aus dem Ärmel raus.

lg mc-dy
Mitglied: 60730
60730 20.03.2012 um 07:51:07 Uhr
Goto Top
Zitat von @bastla:
@t-mo: Hast ja recht ... face-smile

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 face-wink
Grüße
bastla
Retour