batchnewbie
Goto Top

Dateinamen Umbenennen nach Ersetzten

Hallo,
ich experimentiere ein wenig und bin ein einem Punkt, wo ich nicht weiter weiß.

Ich lese ein Dateinamen (DateiName) ein, aus der Mitte der Dateinamen entnehme ich nur die Buchstaben (AZ) , diese forme ich um (AZ5) und möchte die Ausgang Buchstaben (AZ) mit den modifizierten Buchstaben (AZ5) ersetzten. Danach möchte ich Org. Dateinamen mit den Neudateinamen umbenennen.

Zeile 37 macht mir Probleme, bekomme es einfach nicht gebacken wie AZ mit AZ5 ersetzt werden kann.
Egal wie ich es anstelle ob mit %AZ%=%AZ5% oder irgendwie anders, es funktioniert nicht.
Nehme ich die "Nacken" Buchstaben funktioniert es nicht.

Hoffe man kann mir bei dem "kleinen" Problem weiter Helfen.

Mein Code
@echo off & setlocal enabledelayedexpansion & title %~n0
cls

echo.>1234ABCD5678.log
echo.>00Blub00.log

for /f "delims=" %%a in ('dir /b /a-d "*.log"') do (  
   set DateiName=%%a
   echo DateiName: !DateiName!
   
     :: Zahlen filtern
     for /f "delims=1234567890 tokens=1,2" %%i in ("%%a") do (  
     :: Nur Buchstaben
     set AZ=%%i
     echo Buchstaben: !AZ!
     echo.
     )

   :: Extrahieren   
   set AZ1=!AZ:~0,1!
   set AZ2=!AZ:~1,1!
   set AZ3=!AZ:~2,1!
   set AZ4=!AZ:~3,1!
   echo AZ1: !AZ1!
   echo AZ2: !AZ2!
   echo AZ3: !AZ3!
   echo AZ4: !AZ4!
   echo.
   
   :: Zusammensetzen
   set AZ5=!AZ1!-!AZ2!-!AZ3!-!AZ4!
   echo AZ5: !AZ5!
   echo.
   
   :: Ersetzten 
   REM set NeueDateiname:!DateiName:ABCD=-A-B-C-D-!
   set NeueDateiName:!DateiName:!AZ!=!AZ5!!
   echo NeueDateiname: !NeueDateiname!
   
   :: Umbenennen
   echo ren %DateiName% %NeueDateiName%
)
pause

Content-ID: 243832

Url: https://administrator.de/forum/dateinamen-umbenennen-nach-ersetzten-243832.html

Ausgedruckt am: 20.12.2024 um 17:12 Uhr

Gersen
Gersen 16.07.2014 um 13:51:45 Uhr
Goto Top
Hallo,

SET NeueDateiName=!DateiName:%AZ%=%AZ5%!

vielleicht?

Gruß,
Gersen
batchnewbie
batchnewbie 16.07.2014 um 14:04:42 Uhr
Goto Top
leider nicht, als Ausgabe kommt:

NeueDateiName: DateiName:=
Gersen
Gersen 16.07.2014 um 14:22:48 Uhr
Goto Top
Neues Spiel, neues Glück...

Folgendes hat eben geklappt:

call set NeueDateiName=%%DateiName:%AZ%=%AZ5%%%
batchnewbie
batchnewbie 16.07.2014 um 14:39:01 Uhr
Goto Top
Bei mir funktioniert das nicht face-sad :'(
Gersen
Gersen 16.07.2014 aktualisiert um 15:22:08 Uhr
Goto Top
Falscher Post, sorry!
rubberman
Lösung rubberman 16.07.2014 aktualisiert um 20:50:20 Uhr
Goto Top
Hallo batchnewbie,
Was glaubst du wie die cmd mit den ganzen Ausrufezeichen umgeht?
set NeueDateiName:!DateiName:!AZ!=!AZ5!!
Bedenke dass Ausrufezeichen paarweise behandelt werden. Also !DateiName:! als Variable, !=! als Variable und !! als ... ähm ... nix. Und was soll der Doppelpunkt hinter NeueDateiName? (=?)
ungetestet:
for /f "delims=" %%i in ("!AZ!") do for /f "delims=" %%j in ("!AZ5!") do set "NeueDateiName=!DateiName:%%i=%%j!"

Dass Prozentzeichenexpansion in Zeile 41 auch nicht funktionieren kann, sollte einleuchten.

Grüße
rubberman
batchnewbie
batchnewbie 16.07.2014 um 20:49:28 Uhr
Goto Top
Danke face-smile ja das rennt so, aber wieso muss das per doppelte Schleife durchlaufen?
Wieso kann man das nicht so wie hier: Replace - Replace a substring using string substitution machen?
Mit einfachen set NeueDateiname=!DateiName:ABCD=A-B-C-D! funktioniert es ja, werden die beiden Variablen (AZ & AZ5) nicht gelesen?

Übrigens kA wie der Doppelpunkt da hingekommen ist (wohl bei editieren passiert face-wink), es muss selbstverständlich Gleichzeichen rein (Zeile 36 & 37 hinter NeueDateiname). So habe ich es auch hier getestet...


Em ja, die Zeile 41 muss natürlich mit Anführungszeichen laufen...und nicht per Prozentzeichen 0face-smile
rubberman
rubberman 16.07.2014 um 21:13:35 Uhr
Goto Top
Mit einfachen set NeueDateiname=!DateiName:ABCD=A-B-C-D! funktioniert es ja, werden die beiden Variablen (AZ & AZ5) nicht gelesen?
Nein, sie werden nicht gelesen. Wie die Zeile interpretiert wird, habe ich dir oben gezeigt. Jeweils der Ausdruck zwischen zwei aufeinanderfolgenden Ausrufezeichen wird versucht als Variable zu expandieren. Nochmal in Farbe zum besseren Verständnis:
!DateiName:!AZ!=!AZ5!!
Jetzt klar geworden?

Grüße
rubberman
batchnewbie
batchnewbie 16.07.2014 um 21:49:10 Uhr
Goto Top
Jop, jetzt habe ich es verstanden face-smile was so paar Farben bewirken können face-wink
Jetzt verstehe ich auch die zwei Schleifen..., anders bekommen man die Variablen ja nicht gelesen!!

Danke face-smile