lorus11
Goto Top

BATCH - dynamische String Substitution

Hallo Zusammen,

ich versuche gerade eine dynamische String Zerlegung nach dem Schema %string:str1=str2% hinzubekommen.
Wenn str2 eine Variable ist, funktioniert das Ganze auch, allerdings nicht wenn str1 Eine ist.

@echo off
setlocal enabledelayedexpansion

set string=abcd12345
set str1=abcd
set str2=wxyz

set string_1=%string:abcd=!str2!%
set string_2=%string:!str1!=wxyz%
set string_3=%string:!str1!=!str2!%

set str



Ausgabe:
string_1 = wxyz12345 --> Funktioniert
string_2 = abcd12345 --> Funktioniert nicht
string_3 = abcd12345 --> Funktioniert nicht


Wo liegt hier der Fehler?


Grüße,

Lorus

Content-ID: 150599

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

Ausgedruckt am: 23.11.2024 um 04:11 Uhr

bastla
bastla 08.09.2010 um 14:46:36 Uhr
Goto Top
Hallo lorus11!

Eine Antwort auf Deine konkrete Frage habe ich zwar gerade nicht zu bieten, aber:
@echo off & setlocal
set string=abcd12345
set str1=abcd
set str2=wxyz

call set string_1=%%string:abcd=%str2%%%
call set string_2=%%string:%str1%=wxyz%%
call set string_3=%%string:%str1%=%str2%%%

set str
Grüße
bastla
lorus11
lorus11 08.09.2010 um 17:33:54 Uhr
Goto Top
Super, so funktionierts natürlich auch.

Bin in der Zwischenzeit allerdings auch noch auf eine weitere Lösung gestoßen, die ich nicht vorenthalten möchte.

@echo off
setlocal enabledelayedexpansion

set string=abcd12345
set str1=abcd
set str2=wxyz

set string_1=!string:abcd=%str2%!
set string_2=!string:%str1%=wxyz!
set string_3=!string:%str1%=%str2%!

set str
pieh-ejdsch
pieh-ejdsch 08.09.2010 um 18:38:46 Uhr
Goto Top
moin,
eine andere möglichkeit
@echo off

set "string=abcd%12345"  
set "str1=abcd%"  
set "str2=!wxyz"  

for /f "tokens=*" %%i in ("%str1%=%str2%") do (  
	call set "string=%%string:%%i=%%j%%"  
	setlocal enabledelayedexpansion
	for /f "tokens=*" %%j in ("!string!") do endlocal&echo %%j  
)

Gruß Phil