[batch] comparar una variable con varios valores

Iniciado por moikano→@, 21 Diciembre 2010, 16:34 PM

0 Miembros y 1 Visitante están viendo este tema.

moikano→@

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 (dos) [Seleccionar]
@echo off
if %var%=1,8,15 (goto :si) else (goto :no)
:si
echo la variable coincide con 1,8 o 15
:no
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 (dos) [Seleccionar]
@echo off
for %%a in ("1","8","15") do (
if %var%=%%a (goto :si) else (goto :no)
)
:si
echo la variable coincide con 1,8 o 15
:no
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 =)

Diego_Schneider

Buenas.

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

Mira este @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  ;)

moikano→@

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 =)

flony

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
si un problema no tiene solucion entonces no es un problema...es algo inevitable

moikano→@

Citarpseudocódigo que simule un vector aplicando polimetría
Si supiera lo que me estas diciendo =D

CitarSi 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 =)

xassiz~

Modificando un poco tu código :rolleyes:
Código (dos) [Seleccionar]

for %%a in ("1","8","15") do (
    if %var%=%%~a (echo:Coincide) else (echo:No coincide)
)

moikano→@

#6
if %var%=%%~a
Solo era ponerle el?! →~←

Vaya pues gracias. Voy a probarlo.


xassiz~

#7
No, lo que pasa es que tu tenías puesto esto:
Código (dos) [Seleccionar]

if %var%=1,8,15


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

moikano→@

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 (dos) [Seleccionar]
@echo off
for %%a in ("1","8","22") do (
    set dat=%date:~0,2%
    if dat==%%~a (echo Coincide && pause > nul ) else (echo No coincide && pause > nul)
)


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

xassiz~

#9
%dat%, no dat

Código (dos) [Seleccionar]

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