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
| | |-+  Ejecución condicional [Batch] LEER
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ejecución condicional [Batch] LEER  (Leído 10,732 veces)
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Ejecución condicional [Batch] LEER
« 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 comando2
Equivalencia :
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%
"ldkfjgkldjfgkljdklfgkljdfg" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
9009

C:\WINDOWS\system32>
Ahi es donde aplica el %errorlevel% neq 0.

Gracias a Carlitos por la aclaración.

Vamos a ver algunos ejemplos :
Codigo con & :
Código:
@ECHO OFF
REM SE EJECUTA EL COMANDO MSG, SEGUIDO DEL ECHO.
MSG * HOLA! & ECHO HOLA
PAUSE>NUL
EXIT /B
Como vemos arriba el uso del & es muy sencillo.

Codigo con && :
Código:
@ECHO OFF
MSG * HOLA && ECHO EL COMANDO MSG SE EJECUTO CORRECTAMENTE
PAUSE>NUL

Es equivalente a :
Código:
@ECHO OFF
MSG * HOLA
IF %ERRORLEVEL%==0 (
ECHO EL COMANDO MSG SE EJECUTO CORRECTAMENTE
)
PAUSE>NUL
Como vemos, se ahorran mas lineas usando &&

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
PING dklfjlgkdfg.com && (
CLS ;
ECHO PING RESPONDIDO
) || (
CLS
ECHO MAQUINA NO ENCONTRADA!
)
PAUSE>NUL
El codigo nos devolverá : "Maquina no encontrada!"

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.



« Última modificación: 17 Diciembre 2008, 17:46 pm por Leo Gutierrez. » En línea

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

Desconectado Desconectado

Mensajes: 220


Primum non nocere


Ver Perfil
Re: Ejecución condicional [Batch] LEER
« Respuesta #1 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!


En línea

Nuestro idioma ha tardado 12 siglos en llegar hasta hoy día. Tú tan sólo tardas 20 segundos en escribir un post: no destroces en tan poco tiempo lo que tantos siglos ha costado crear.
WestOn

Desconectado Desconectado

Mensajes: 272


El testamento Maya...


Ver Perfil
Re: Ejecución condicional [Batch] LEER
« Respuesta #2 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 saludo
En línea

En mi cabeza existe una barrera espacio-tiempo de 4cm³. ¿Alguien sabe como eliminarla?.
                                                                                                                                                                                                                            
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Ejecución condicional [Batch] LEER
« Respuesta #3 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.
En línea

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

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Ejecución condicional [Batch] LEER
« Respuesta #4 en: 20 Noviembre 2008, 07:05 am »

buen artículo Rockox, aunque yo redefiniría || como %errorlevel% neq 0
En línea

SmartGenius

Desconectado Desconectado

Mensajes: 181


:P


Ver Perfil WWW
Re: Ejecución condicional [Batch] LEER
« Respuesta #5 en: 23 Noviembre 2008, 00:01 am »

Excelente RockoX...nunca he llegado a usar || pero ya le veo utilidad....xD xD

Saludos.
En línea


leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Ejecución condicional [Batch] LEER
« Respuesta #6 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.
« Última modificación: 17 Diciembre 2008, 17:47 pm por Leo Gutierrez. » En línea

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

Desconectado Desconectado

Mensajes: 225


NULL


Ver Perfil
GRACIASSS
« Respuesta #7 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)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[BATCH] Detectar primera ejecucion y guardar datos
Scripting
EAMP14 2 2,836 Último mensaje 5 Abril 2012, 18:46 pm
por EAMP14
Leer datos de un programa en ejecución « 1 2 »
Programación C/C++
samuelhm 13 7,482 Último mensaje 6 Abril 2013, 15:29 pm
por zamolxe
[BATCH] duda con condicional IF y and
Scripting
imlikeabird34 6 6,489 Último mensaje 22 Diciembre 2012, 04:40 am
por Segadorfelix
[BATCH] Ocultar bat en ejecucion
Scripting
llAudioslavell 1 3,789 Último mensaje 7 Octubre 2016, 05:16 am
por Eleкtro
[BATCH] Error al final de la ejecucion
Scripting
baldovi_6 2 1,913 Último mensaje 3 Noviembre 2018, 18:50 pm
por baldovi_6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines