17. februar 2004 - 10:06
Der er
2 kommentarer
variable substitution
Jeg har en environment variable i Windows 2000 (CMD prompt/batch script) der indeholder "*".
Jeg vil gerne substituere * for et andet tegn fx. _
a lá:
set test=ab*cd
set resultat=%test:*=_%
Kan man det?
* som 1. tegn betyder at den skal matche alt op til det flg. tegn...
fx.
set resultat=%test:*c=_%
giver resultat=_d, men jeg vil gerne have resultat=ab_cd
17. februar 2004 - 20:23
#1
Interesant spørgsmål, jeg kan ikke lige finde en simpel løsning, men hvis man ved at test indeholder en og kun en * kan man bruge:
for /F "tokens=1,2 delims=*" %I in ("%test%") do set resultat=%I_%J
Hvor %I skal være %%I (og samme for %J) hvis det er i en bat-fil.
17. februar 2004 - 23:06
#2
Hej bertelbrander.
Interessant løsning, men den duer jo kun for 1 *.
Jeg forsøgte, baseret på dit løsningsforslag, at lave en løkke der måske kunne gøre det, men det fungerer heller ikke hvis der er flere *'er efter hinanden (så ryger de i eet hug.
Fx:
set z=*ab*cd*ef*gh****
if %z:~0,1%. == *. set z=_%z:~1%
if %z:~-1%. == *. set z=%z:~0,-1%_
:loop
for /f "tokens=1,* delims=*" %%i in ("%z%") do (
if %%j. == . goto done
set z=%%i_%%j
)
goto loop
:done
echo %z%
Løsningen er blevet et loop der ikke er langt mindre effektiv, men som virker:
REM **** Eliminate '*'
set T=*ab*cd*ef*gh****
set POS=0
set OutPut=
:loop
set C=%T:~0,1%
if /i %C%.==*. (
set OutPut=%OutPut%_
) ELSE (
set OutPut=%OutPut%%C%
)
set T=%T:~1%
if %T%.==. goto done
set /a POS=POS+1
goto loop
:done
echo %OutPut%