Avatar billede madsnor Nybegynder
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
Avatar billede bertelbrander Novice
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.
Avatar billede madsnor Nybegynder
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%
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester