elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Combinación lógica en sentencia IF [Batch]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Combinación lógica en sentencia IF [Batch]  (Leído 9,588 veces)
IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Combinación lógica en sentencia IF [Batch]
« en: 26 Junio 2010, 03:29 am »

Hola estoy haciendo un pequeño script en batch y no se como hacer un IF con varias combinaciones lógicas.

Lo que estoy haciendo es lo siguiente:

Código
  1. if "%%~xx" == ".xls" | "%%~xx" == ".xlsx" | "%%~xx" == ".doc" | "%%~xx" == ".docx"  | "%%~xx" == ".pdf"  | "%%~xx" == ".mdb"  | "%%~xx" == ".accdb"
  2.  

Pero me da error diciendo: No se esperaba | en este momento.

También he probado de este otro modo:

Código
  1. if "%%~xx" == ".xls" or "%%~xx" == ".xlsx" or "%%~xx" == ".doc" or "%%~xx" == ".docx"  or "%%~xx" == ".pdf"  or "%%~xx" == ".mdb"  or "%%~xx" == ".accdb"
  2.  

Pero siempre se cumple el IF cuando y en algunas ocasiones no debería de cumplisrse, así que tampoco funciona bien.

Alguna solución que no sea una cadena de if - else - if

NOTA: el IF está dentro de un FOR y la variable del FOR es x.

Un saludo y gracias.


En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Combinación lógica en sentencia IF [Batch]
« Respuesta #1 en: 26 Junio 2010, 03:45 am »

Alguna solución que no sea una cadena de if - else - if

No.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Combinación lógica en sentencia IF [Batch]
« Respuesta #2 en: 26 Junio 2010, 03:48 am »

Pues vaya ***** de lenguaje. ¿Pero en serio que no se puede hacer nada?, ¿no hay otra manera de montar el if para que todo se pueda validar de golpe?.
En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Combinación lógica en sentencia IF [Batch]
« Respuesta #3 en: 26 Junio 2010, 03:51 am »

Citar
¿Pero en serio que no se puede hacer nada?

Claro que sí, conociendo esa **** de lenguaje.

Dame algunos minutos, estoy en Linux.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Combinación lógica en sentencia IF [Batch]
« Respuesta #4 en: 26 Junio 2010, 03:59 am »

Hombre llevo ya un rato buscando en google, pero casi siempre sale el manual de sdc, y ahí solo está lo básico, y en la ayuda de batch tampoco es que se explaye mucho.

Espero... a que termines.
En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Combinación lógica en sentencia IF [Batch]
« Respuesta #5 en: 26 Junio 2010, 04:03 am »

Lo sé, en Batch no hay manuales de referencia, hace tiempo que estoy pensando en escribir algo, pero no tengo tiempo.


PD : Si quieres no consideres a Batch como un lenguaje.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Combinación lógica en sentencia IF [Batch]
« Respuesta #6 en: 26 Junio 2010, 04:08 am »

Pues si que estaría bien que hicieras un manual con materia más avanzada, porque ya te digo que llevo rato mirando y no encuentro nada, y los ejemplos que encuentro la mayoría son de if sentenciaSimple goto.

Hombre se que bacth es limitado, pero que menos que un mínimo de sintaxis bien definida.
En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Combinación lógica en sentencia IF [Batch]
« Respuesta #7 en: 26 Junio 2010, 06:14 am »

Disculpas por la tardanza, lo había olvidado.

Puedes implementar algo así:

Código
  1. @echo off
  2. if "%1"=="" (
  3. echo [ERROR] 1
  4. exit /b 1
  5. )
  6. rem ".xls" ".xlsx" ".doc" ".docx" ".pdf" ".mdb" ".accdb"
  7. for %%_ in (.xls, .xlsx, .doc, .docx .pdf .mdb .accdb) do (
  8. echo %1 | findstr /i "%%_\>" && (goto:found)
  9. )
  10. goto:eof
  11. :found
  12. echo Archivo valido.
  13. exit /b 0

Bastante artesanal, pero bueno, de que se puede se puede.

Hombre se que bacth es limitado, pero que menos que un mínimo de sintaxis bien definida.

Eso dicelo a los programadores de Microsoft, yo siempre he estado enojado con ellos  :P, lo que más me puede es que no podemos trabajar con decimales.
Código:

C:\>code jklasd

C:\>code jklasd.pdf
jklasd.pdf
Archivo valido.

C:\>code jklasd.txt

C:\>code jklasd.xls
jklasd.xls
Archivo valido.

C:\>code jklasd.docx
jklasd.docx
Archivo valido.

C:\>code jklasd.cpp

C:\>code jklasd.mdb
jklasd.mdb
Archivo valido.

C:\>
« Última modificación: 26 Junio 2010, 06:16 am por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Combinación lógica en sentencia IF [Batch]
« Respuesta #8 en: 26 Junio 2010, 09:39 am »

Gracias, voy a probarlo, de momento tengo toda una cadena de if - else - if,. Está solución aunque no queda muy bonita (no tiene estética) parece ser que soluciona el problema que yo comentaba, pero hay que reconocer que es un poco rebuscado, en fin gracias de nuevo, y ya comento que tal funciona.
En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
IWKY

Desconectado Desconectado

Mensajes: 272



Ver Perfil
Re: Combinación lógica en sentencia IF [Batch]
« Respuesta #9 en: 26 Junio 2010, 10:42 am »

mmmm....

No me termina de servir, porque tu implementación solo encuentra una coincidencia sale del FOR y se va al :found, yo quisiera que se quedara dentro del FOR, te pongo el código para que lo veas.

Código
  1. @echo off
  2.  
  3. set ruta=%~dp0
  4. set save=%ruta%save
  5.  
  6. if not exist "%save%" (
  7. mkdir "%save%" > nul
  8. attrib +R +H "%save%" > nul
  9. )
  10.  
  11. %HOMEDRIVE% > nul
  12. cd %HOMEPATH% > nul
  13.  
  14.  
  15. for /R %%x in (*.*) do (
  16. if "%%~xx" == ".xls" (
  17. copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
  18. ) else (
  19. if "%%~xx" == ".xlsx" (
  20. copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
  21. ) else (
  22. if "%%~xx" == ".doc" (
  23. copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
  24. ) else (
  25. if "%%~xx" == ".docx" (
  26. copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
  27. ) else (
  28. if "%%~xx" == ".pdf" (
  29. copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
  30. ) else (
  31. if "%%~xx" == ".mdb" (
  32. copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
  33. ) else (
  34. if "%%~xx" == ".accdb" (
  35. copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
  36. )
  37. )
  38. )
  39. )
  40. )
  41. )
  42. )
  43. ) > nul
  44.  
  45. exit /b 0
  46.  
  47.  


Si utilizo tu código se saldría del for con la primera coincidencia, y no creo que con otro GOTO hacia dentro del FOR funcione, así que o existe otra opción o creo que se quedará así, aunque no veo lógico que no se pueda hacer una combinación lógica dentro de un IF.



*** EDITO ***

Estoy probando otra cosa, en la cual uso tu código.
Código
  1. for /R %%x in (*) do (
  2. for %%e in (.xls, .xlsx, .doc, .docx .pdf .mdb .accdb) do (
  3. echo %%x | findstr /i "%%e\>" && goto found
  4. goto nofound
  5. :found
  6. copy "%%x" "%save%\%%~nx%%~xx" /Y > nul
  7. :nofound
  8. ) > nul
  9. ) > nul
  10.  
  11.  

Y el problema que surge en este caso, es que después de la etiqueta :nofound da un error: La sintaxis del comando no es correcta..
La idea es que si no coincide que continue en la ejecución del bucle, pero da ese error, y ahora mismo no se me ocurre como hacer una combinación de goto's para que funcione bien.

Saludos.
« Última modificación: 26 Junio 2010, 11:54 am por IWKY » En línea

Por internet libre http://red-sostenible.net/
El mejor momento de Dragon Ball Z --> Aqui
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Combinación de colores de Windows - Batch
Scripting
NOIS 2 2,173 Último mensaje 16 Mayo 2015, 10:24 am
por NOIS
MOVIDO: Combinación de colores de Windows - Batch
Programación General
Eleкtro 0 1,543 Último mensaje 15 Mayo 2015, 02:54 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines