Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: moikano→@ en 21 Diciembre 2010, 16:34 pm



Título: [batch] comparar una variable con varios valores
Publicado por: moikano→@ en 21 Diciembre 2010, 16:34 pm
Saludos

Estoy intentando comparar una variable con varios valores pero no lo consigo, algo estoy haciendo mal o no hago lo debido. Os enseño lo que he probado.

Código
  1. @echo off
  2. if %var%=1,8,15 (goto :si) else (goto :no)
  3. :si
  4. echo la variable coincide con 1,8 o 15
  5. :no
  6. echo la variable no coincide

La variable está definida anteriormente, quiero decir que no está vacía sino sería fácil saber cual es el error =D

Luego también probé  con for, pero tampoco me funcionó.

Código
  1. @echo off
  2. for %%a in ("1","8","15") do (
  3. if %var%=%%a (goto :si) else (goto :no)
  4. )
  5. :si
  6. echo la variable coincide con 1,8 o 15
  7. :no
  8. echo la variable no coincide

En caso de que se pueda hacer sin el for preferiría hacerlo sin el, ya que creo quedará mas corto el code.

Gracias de antemano =)


Título: Re: [batch] comparar una variable con varios valores
Publicado por: Diego_Schneider en 22 Diciembre 2010, 01:56 am
Buenas.

El problema es simple, no podes comparar con varias al mismo tiempo.

Mira este
Código:
@echo off
set /p var="Elija el numero de la variable > "
if "%var%"=="1" goto :si
if "%var%"=="8" goto :si
if "%var%"=="15" goto :si
goto :no
:si
echo la variable coincide con 1,8 o 15
pause
exit
:no
echo la variable no coincide
pause
exit

hay dos problemas:

1°- Para comparar, hay que usar dos veces el signo igual ( == en vez de = )
2°- Hay que comparar de uno en uno, si %var% es igual a 1, va a :si si es igual a 8 o a 15, tambien, y si no se cumple ninguno, continua con el codigo, o sea, que te manda a :no
3°- Si al final del :si no poner un "exit" te va a continuar con el :no , por eso agregué "pause & exit" al final del :si y :no

Bueno, ademas, agregue para que elijas el numero de la variable, a ver si funciona en todos los ejemplos.
El programa esta completamente funcional  :P asi que no te va a dar problemas ese.

Nos vemos  ;)


Título: Re: [batch] comparar una variable con varios valores
Publicado por: moikano→@ en 22 Diciembre 2010, 02:40 am
Si esa solución es la que apliqué yo, pero quería saber si hay una forma mas "limpia" de comparar una variable con varios valores.

Gracias igualmente =)


Título: Re: [batch] comparar una variable con varios valores
Publicado por: flony en 22 Diciembre 2010, 04:42 am
digo una idea seria hacer un seudocodigo que simule un vector aplicando polimetria  :rolleyes:...pero la verdad esta tan sencilla la solucion que dio Diego_Schneider que no aplicaria nada  ;D


Título: Re: [batch] comparar una variable con varios valores
Publicado por: moikano→@ en 22 Diciembre 2010, 11:52 am
Citar
pseudocódigo que simule un vector aplicando polimetría
Si supiera lo que me estas diciendo =D

Citar
Si esa solución es la que apliqué yo, pero quería saber si hay una forma mas "limpia" de comparar una variable con varios valores.

Pues eso =)


Título: Re: [batch] comparar una variable con varios valores
Publicado por: xassiz~ en 22 Diciembre 2010, 13:25 pm
Modificando un poco tu código :rolleyes:
Código
  1. for %%a in ("1","8","15") do (
  2.    if %var%=%%~a (echo:Coincide) else (echo:No coincide)
  3. )


Título: Re: [batch] comparar una variable con varios valores
Publicado por: moikano→@ en 22 Diciembre 2010, 13:48 pm
Código:
if %var%=%%~a
Solo era ponerle el?! →~←

Vaya pues gracias. Voy a probarlo.



Título: Re: [batch] comparar una variable con varios valores
Publicado por: xassiz~ en 22 Diciembre 2010, 13:51 pm
No, lo que pasa es que tu tenías puesto esto:
Código
  1. if %var%=1,8,15
  2.  

Además, el símbolo de comparación es "=="


Título: Re: [batch] comparar una variable con varios valores
Publicado por: moikano→@ en 22 Diciembre 2010, 14:03 pm
Si si, lo e modificado conforme lo e visto al comparar el tuyo con le mio =)

De todas formas no funciona muy bien igualmente, me explico con el código mejor:

Código
  1. @echo off
  2. for %%a in ("1","8","22") do (
  3.    set dat=%date:~0,2%
  4.    if dat==%%~a (echo Coincide && pause > nul ) else (echo No coincide && pause > nul)
  5. )

Bueno pues hoy estamos a día 22 y el code me saca que "no coincide" con los tres valores.


Título: Re: [batch] comparar una variable con varios valores
Publicado por: xassiz~ en 22 Diciembre 2010, 14:06 pm
%dat%, no dat

Código
  1. for %%a in ("1","8","22") do (
  2.    set dat=%date:~0,2%
  3.    if %dat%==%%~a (echo Coincide %%a) else (echo No coincide %%a)
  4. )


Título: Re: [batch] comparar una variable con varios valores
Publicado por: moikano→@ en 22 Diciembre 2010, 15:06 pm
Ok ahora si, dejando el
Citar
set dat=%date:~0,2%
fuera del for si que me funciona.

El código quedaría así:

Código
  1. @echo off
  2.    set dat=%date:~0,2%
  3. for %%a in ("1","8","22") do (
  4.    if %dat%==%%~a (echo Coincide %%a && pause > nul ) else (echo No coincide %%a && pause > nul)
  5. )

gracias Pablo =)


Título: Re: [batch] comparar una variable con varios valores
Publicado por: xassiz~ en 22 Diciembre 2010, 16:08 pm
De nada, para eso estamos :P


Título: Re: [batch] comparar una variable con varios valores
Publicado por: leogtz en 22 Diciembre 2010, 18:43 pm
@moikano→@

Código
  1. if %dat%==%%~a (echo Coincide %%a && pause > nul ) else (echo No coincide %%a && pause > nul)

Poner varias sentencias en una línea es un mal habito de programación.


Título: Re: [batch] comparar una variable con varios valores
Publicado por: moikano→@ en 22 Diciembre 2010, 19:25 pm
Ouch  =\
Entendido  =)