Título: Ejecución condicional [Batch] LEER Publicado por: leogtz en 15 Noviembre 2008, 05:44 am Ejecucion condicional
Bueno este tutorial, vamos a aprender a usar los caracteres & && || y un poco de ERRORLEVEL. Una confusion muy frecuente es que usan los caracteres & y && con el mismo proposito, & y && no son iguales. Tienen sus significados para el CMD. Código: comando1 & comando2 : Ejecuta el comando1 seguido de comando2Equivalencia : Código: comando1 comando2 Código: comando1 && comando2 : Ejecuta el comando2 solo si el comando1 fue ejecutado satisfactoriamente.Equivalencia : Código: comando1 if %errorlevel%==0 (comando2) Código: comando1 || comando2 : Ejecuta el comando2 solo si el comando1 fue ejecutado insatisfactoriamente, es decir, si hubo un error en el comando.Equivalencia : Código: comando1 }if %errorlvel%==1 (comando2) El || se definiria como un %errorlevel% neq 0, ya que no todos los comandos devuelven un 0 o un 1. Ejemplo : Código: C:\WINDOWS\system32>ldkfjgkldjfgkljdklfgkljdfg & echo %errorlevel% Ahi es donde aplica el %errorlevel% neq 0."ldkfjgkldjfgkljdklfgkljdfg" no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable. 9009 C:\WINDOWS\system32> Gracias a Carlitos por la aclaración. Vamos a ver algunos ejemplos : Codigo con & : Código: @ECHO OFF Como vemos arriba el uso del & es muy sencillo.REM SE EJECUTA EL COMANDO MSG, SEGUIDO DEL ECHO. MSG * HOLA! & ECHO HOLA PAUSE>NUL EXIT /B Codigo con && : Código: @ECHO OFF MSG * HOLA && ECHO EL COMANDO MSG SE EJECUTO CORRECTAMENTE PAUSE>NUL Es equivalente a : Código: @ECHO OFF Como vemos, se ahorran mas lineas usando &&MSG * HOLA IF %ERRORLEVEL%==0 ( ECHO EL COMANDO MSG SE EJECUTO CORRECTAMENTE ) PAUSE>NUL Veamos otro ejemplo : Código: @ECHO OFF VER | FIND /I "LEO" && ( REM EL SIGUIENTE CODIGO NUNCA SE EJECUTARA, DEBIDO A QUE EN EL COMANDO VER REM NO EXISTE NADA RELACIONADO CON LA CADENA "LEO" ECHO CADENA "LEO" ENCONTRADA EN EL COMANDO VER ) PAUSE>NUL EXIT /B Variemosle un poco para entender mejor : Código: @ECHO OFF VER | FIND /I "XP" && ( REM EL SIGUIENTE CODIGO SI EJECUTARA, DEBIDO A QUE EN LA SALIDA DEL COMANDO VER REM SI EXISTE "XP" ECHO CADENA "XP" ENCONTRADA EN EL COMANDO VER ) PAUSE>NUL EXIT /B Los caracteres || (pipes o tuberias juntas) : Codigo con || : Pondre un codigo simple para detectar si un Host responde a un PING : Código: @ECHO OFF PING GOOGLE.COM && ( CLS ; ECHO PING RESPONDIDO ) || ( CLS ECHO MAQUINA NO ENCONTRADA! ) Código: Aqui logicamente que si encontrará a google.com, pero que pasa si ponemos en lugar de google.com sdfjksjdf.com : Código: @ECHO OFF El codigo nos devolverá : "Maquina no encontrada!"PING dklfjlgkdfg.com && ( CLS ; ECHO PING RESPONDIDO ) || ( CLS ECHO MAQUINA NO ENCONTRADA! ) PAUSE>NUL Como ven, || funciona como un ELSE. Otro ejemplo de || : Código: @ECHO OFF COPY ARCHIVO_INVENTADO.ALGO CARPETA_INVENTADA || ( ECHO EL ARCHIVO NO FUE ENCONTRADO O LA CARPETA DESTINO NO EXISTE! ) || ( ECHO ESTE MENSAJE JAMAS SE VERA ) && ( ECHO ESTE MENSAJE TAMPOCO. ) PAUSE>NUL Con este concluye este tutorial. PD : No confundir || con | ni & con &&, tienen sus significados. Curiosidades : Código: @ECHO OFF ECHO HOLA ||~|| (ECHO SI) PAUSE Código: @ECHO OFF ECHO HOLA ||.~.|| (ECHO SI) PAUSE>NUL En resumen: Esto es muy importante saberlo, nos permite ahorrar muchas lineas de codigo, ademas de que el codigo se ve mas legible y elegante. Título: Re: Ejecución condicional [Batch] LEER Publicado por: corax en 19 Noviembre 2008, 22:40 pm Citar Esto es muy importante saberlo, nos permite ahorrar muchas lineas de codigo, ademas de que el codigo se ve mas legible y elegante. Efectivamente, considero que es un gran aporte que se expliquen con claridad este tipo de cosas. Además me gusta tu forma de explicar, serías buen profesor... ¿Nunca has pensado en hacer un manual completo de tu propia cosecha? Saludos! Título: Re: Ejecución condicional [Batch] LEER Publicado por: WestOn en 20 Noviembre 2008, 00:19 am Wenas, muy buena la explicacion, la verdad esto sirve bastante!
Nunca has pensado en hacer un manual completo de tu propia cosecha? Opino lo mismo ;), un saludoTítulo: Re: Ejecución condicional [Batch] LEER Publicado por: leogtz en 20 Noviembre 2008, 05:19 am Citar Esto es muy importante saberlo, nos permite ahorrar muchas lineas de codigo, ademas de que el codigo se ve mas legible y elegante. Efectivamente, considero que es un gran aporte que se expliquen con claridad este tipo de cosas. Además me gusta tu forma de explicar, serías buen profesor... ¿Nunca has pensado en hacer un manual completo de tu propia cosecha? Saludos! Gracias, no nunca lo habia pensado, prefiero postear de poco en poco tutoriales especificos. Luego posteo algo sobre REDIRECCIÓN. Saludos. Título: Re: Ejecución condicional [Batch] LEER Publicado por: carlitos.java en 20 Noviembre 2008, 07:05 am buen artículo Rockox, aunque yo redefiniría || como %errorlevel% neq 0
Título: Re: Ejecución condicional [Batch] LEER Publicado por: SmartGenius en 23 Noviembre 2008, 00:01 am Excelente RockoX...nunca he llegado a usar || pero ya le veo utilidad....xD xD
Saludos. Título: Re: Ejecución condicional [Batch] LEER Publicado por: leogtz en 17 Diciembre 2008, 17:42 pm buen artículo Rockox, aunque yo redefiniría || como %errorlevel% neq 0 Ya puse una anotación en el lugar de ||, gracias por la aclaración. Saludos a todos. Título: GRACIASSS Publicado por: Banti en 17 Diciembre 2008, 18:15 pm GRacias!!!!!!!
Yo queria algo que cuando no cumpla su objetivo el comando, no se ejecute el comando siguiente o lo contrario. Y ahora que lo veo se me vienen millones de ideas para simplificar (o hacer un maldito debugging) mis codigos!!! Y ahora se para que sirve el "errorlevel" wiiiiii GRacias! (otra vez) |