Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: nhaalclkiemr en 1 Mayo 2007, 23:25 pm



Título: Como imprimir el valor de una variable definida en una variable...
Publicado por: nhaalclkiemr en 1 Mayo 2007, 23:25 pm
Mirad, imaginaros esto:

Código:
set e=i
set a=e
echo %a%>>prue.txt
REM La salida para esta ultima linea será "e"
echo %%a%%>>prue.txt
REM La salida para esta ultima linea será "%a%"
echo %%%a%%%>>prue.txt
REM La salida para esta ultima linea será "%e%"

Pues yo lo que quiero es que la salida de la varialbe a sea i

No se si me entendeis...a ver...yo tengo una variable a la cual tiene como valor e . Y existe una variable e que tiene como valor i

Pues si hago:

Código:
echo %e%

Obtengo de salida

Código:
i

pero yo no quiero usar la variable e, yo quiero usar la variable a que tiene como valor la otra variable:

Código:
echo %a%

Pero eso imprimirá

Código:
e


Si pongo:

Código:
echo %%a%%

Pero eso imprimirá

Código:
%a%


Y si pongo:

Código:
echo %%%a%%%

Me imprimirá

Código:
%e%

Eso es lo que queria al parecer no, que me imprima %e% para que despues se me expanda en i Sin embargo no es asi. Lo demuestro con este BATCH.

Código:
set e=i
set a=e
set temp=%%%a%%%
set fin=%temp%
echo %fin%
REM LA salida será "%e%" pero esta no se espandirá NUNCA en "i"


Pues eso, no veo la manera de usando la variable %a% esta me imprima i que es el valor de %e%, el cual es el valor de %a%

Ahora os digo, quiezais pensais que así:

Código:
set e=i
set a=e
echo %e%

O así:

Código:
set e=i
set a=i
echo %a%

Pero ya os digo que en este caso vale, pero eso fue pork os puse un ejemplo sencillo...Lo que os puse es un ejemplo, vosotros pensad en que tengo que utilizar la variable a para encontrar el valor final de e que es i


No se si me entendió muy bien, pero weno...

Saludos ;) ;)


Título: Re: Como imprimir el valor de una variable definida en una variable...
Publicado por: sirdarckcat en 2 Mayo 2007, 00:54 am
2 formas..
Código:
@echo off
set f=a
set a=nomeves
echo %f%
call:funcion %%%f%%%
pause
goto:EOF
:funcion
echo %1
Código:
@echo off
set f=a
set a=nomeves
echo %f%
set comando=echo %%%f%%%
cmd /C %comando%
pause


Título: Re: Como imprimir el valor de una variable definida en una variable...
Publicado por: nhaalclkiemr en 2 Mayo 2007, 15:58 pm
Gracias, es lo que necesitaba...

No se me ocurrió lo del cmd /C %comando% jejeje

Lo que si que no entiendo es la manera que usas call:etiqueta o goto:etiqueta
Leí tu manual pero sigo sin enterarme mucho...solo se que goto:EOF te lleva al final del archivo o algo así...
Yo goto solo se usarlo así: goto etiqueta y call así: call archivo

Y otra duda, ¿pork si uso parentesis las variables no quedan definidas hasta que salgo de el?
Por ejemplo:

Código:
@echo off
set a=2
set b=2
if %a%==%b% (
echo Imprime su valor = "%a%"
set a=5
echo Imprime el antiguo valor = "%a%"
set c=9
echo No imprime c, c no está definido = "%c%"
)
echo Ahora fuera del parentesis me imprime su nuevo valor = "%a%"
echo Ahora fuera del parentesis la variable ya esta definida = "%c%"
pause>NUL

En este BATCH la salida será:

Código:
Imprime su valor = "2"
Imprime el antiguo valor = "2"
No imprime c, c no está definido = ""
Ahora fuera del parentesis me imprime su nuevo valor = "5"
Ahora fuera del parentesis la variable ya esta definida = "9"

Como ves defino a con valor 2 antes del parentesis y dentro del parentesis me imprime ese valor, todo normal...pero despues le doy a a valor 5 dentro del parentesis pero al hacer echo %a% compruevo que su valor sigue siendo 2 dentro del parentesis. Dentro del parentesis tambien defino la variable c con valor 9 pero no funciona...Sin embargo fuera del parentesis la variable a ya tiene su nuevo valor 5 y c su valor 9...

Segun lo que yo creía ese BATCH debería ser igual a este pero no lo es:

Código:
@echo off
set a=2
set b=2
if %a%==%b% goto etiq1
:etiq2
echo Ahora fuera del parentesis me imprime su nuevo valor = "%a%"
echo Ahora fuera del parentesis la variable ya esta definida = "%c%"
pause>NUL
exit
:etiq1
echo Imprime su valor = "%a%"
set a=5
echo Imprime el antiguo valor = "%a%"
set c=9
echo No imprime c, c no está definido = "%c%"
goto etiq2

Pero la salida de este es diferente:

Código:
Imprime su valor = "2"
Imprime el antiguo valor = "5"
No imprime c, c no estß definido = "9"
Ahora fuera del parentesis me imprime su nuevo valor = "5"
Ahora fuera del parentesis la variable ya esta definida = "9"

No se si me entiendes?

Leí tu manual y entendi casi todo, menos esta parte de las etiquetas y del uso con el goto y call, y weno lo de los parentesis no se a k se debe...me podrías explicar estas cosas si no te es mucha molestia? Gracias ;) ;)


Título: Re: Como imprimir el valor de una variable definida en una variable...
Publicado por: sirdarckcat en 3 Mayo 2007, 01:09 am
para hacer lo que dices de er el valor "acutalizado" de una variable, necesitas activar las "extensiones de comandos" de CMD.. con cmd /E:ON y despues llamar al valor de la variable con !variable!

Saludos!!


Título: Re: Como imprimir el valor de una variable definida en una variable...
Publicado por: nhaalclkiemr en 3 Mayo 2007, 16:45 pm
Código:
Las extensiones de comandos están habilitadas de forma predeterminada en Windows XP.

Esto lo pone en la ayuda de Windows...Y ademas ya prové lo que tu dices, no se me expande la variable de la manera que tu dices, y tengo las extensiones de comandos habilitadas.

Incluso prove los ejemplos que trae el comando set /?. En teoria el primero deberia de funcionar y el segundo no:

Código:
@echo off
set VAR=antes
if "%VAR%" == "antes" (
    set VAR=después
    if "!VAR!" == "después" @echo Si esto se puede ver, entonces significa que funcionó
)
pause

Código:
@echo off
set VAR=antes
if "%VAR%" == "antes" (
    set VAR=después
    if "%VAR%" == "después" @echo Si esto se puede ver, entonces significa que funcionó
)
pause

Pues a mi no me funciona ninguno :-( :-(


Título: Re: Como imprimir el valor de una variable definida en una variable...
Publicado por: sirdarckcat en 3 Mayo 2007, 17:58 pm
que te puedo decir, jeje a mi si me funciona :P
que raro.. creo q puedes habilitar las extensiones desde regedit.. (no estoy seguro).

Saludos!!