¿Qué es un nivel de error?

En Microsoft Windows y MS-DOS, un nivel de error es el número entero devuelto por un proceso secundario cuando finaliza.

Errorlevel es 0 si el proceso fue exitoso.

Errorlevel es 1 o mayor si el proceso encontró un error.

Probar el nivel de error es útil cuando está ejecutando una serie de comandos, ya sea en la línea de comandos o en un archivo por lotes.

Usando una expresión condicional, puede especificar una serie de comandos para que ocurran solo si un comando anterior fue exitoso. También puede probar la falla, ejecutando comandos solo si el comando anterior falló. A veces, si el programa lo admite, también puede probar tipos de errores específicos.

También puede bifurcar la ejecución del comando, de modo que se ejecute un conjunto diferente de comandos si el comando anterior falla.

Condicional "if [not] errorlevel"

La expresión condicional " if errorlevel n " es verdadera si el errorlevel es mayor o igual que n .

De manera similar, " si no es errorlevel n " es verdadero si el errorlevel es menor que n .

Veamos algunos ejemplos de cómo se pueden usar, ejecutando algunos comandos en la línea de comandos de Windows.

Para comenzar, abra una ventana del símbolo del sistema: presione Win + X (mantenga presionada la tecla de Windows y presione X ), y elija Símbolo del sistema .

Ahora vamos a ejecutar un comando simple:

 mkdir mydirectory 

Cuando ejecutamos mkdir (asumiendo que no hay un directorio llamado "mydirectory" en el directorio actual), se crea el directorio mydirectory . El comando fue exitoso, por lo que cuando mkdir termina, establece el nivel de error en 0 .

Vamos a probar para errorlevel 0.

Prueba de éxito: "si no es errorlevel"

Podemos probar el errorlevel 0 (éxito) con la declaración condicional si no es errorlevel 1 . Si eso es cierto (errorlevel es menor que 1), se ejecutará el comando que sigue al condicional. En los ejemplos a continuación, usaremos el comando echo para imprimir un mensaje en la pantalla.

 si no es errorlevel 1 echo El último comando fue exitoso. 
 El último comando fue exitoso. 

Como se indicó, el comando mkdir que ejecutamos anteriormente fue exitoso.

Sin embargo, si intentamos volver a crear el directorio, mkdir fallará, porque el directorio mydirectory ya existe:

 mkdir mydirectory 
 Ya existe un ejemplo de subdirectorio o archivo. 

Cuando mkdir falla, proporciona su propio mensaje de error, "Ya existe un subdirectorio o ejemplo de archivo", y establece el errorlevel a 1. Si ejecutamos nuestra declaración condicional nuevamente:

 si no es errorlevel 1 echo El último comando fue exitoso. 

No pasa nada. Nuestro comando echo no se ejecuta, porque probamos el éxito (errorlevel menor que 1) y esa condición es falsa.

Fallo de prueba: "si errorlevel"

Podemos probar específicamente la falla con si errorlevel 1, que devuelve verdadero si el errorlevel es 1 o mayor.

 si errorlevel 1 echo El último comando falló. 
 El último comando falló. 

Se cumple la condición (porque mkdir estableció previamente el nivel de error 1) y se ejecuta el comando echo . También se ejecutaría si el nivel de error fuera 2, 3, 4, etc. Si el nivel de error fuera 0, no se ejecutaría.

Ejecución de bifurcaciones con if..else

En los ejemplos anteriores, probamos el éxito o el fracaso, pero no ambos.

Podemos probar tanto el éxito como el fracaso utilizando una declaración if / else del formulario:

 si [ no ] errorlevel n ( command1 ) else ( command2 ) 

Nota: Los paréntesis son necesarios para separar los comandos de la palabra else .

Por ejemplo:

 mkdir más reciente 
 si no es errorlevel 1 (echo Success) else (echo Failure) 
 Éxito 
 mkdir más reciente 
 Ya existe un subdirectorio o archivo newtest. 
 si no es errorlevel 1 (echo Success) else (echo Failure) 
 Fracaso 

Variable de entorno% ERRORLEVEL%

A menudo, el nivel de error también se almacena en la variable de entorno % ERRORLEVEL% . Su valor es una forma conveniente de acceder a su nivel de error actual.

En el siguiente ejemplo, ejecutamos el comando dir dos veces, una vez con éxito y otra sin éxito. Después de cada uno, hacemos eco del valor de % ERRORLEVEL% .

 ejemplo mkdir 
 ejemplo de dir 
 Directorio de C: \ Users \ Hope \ example 06/10/2018 09:43 PM. 10/06/2018 09:43 PM .. 0 Archivo (s) 0 bytes 2 Dir (s) 50, 671, 132, 672 bytes gratis 
 echo% ERRORLEVEL% 
 0 
 dir mal escrito 
 Directorio de C: \ Users \ Hope Archivo no encontrado 
 echo% ERRORLEVEL% 
 1 

Usando% ERRORLEVEL% en condicionales

Puede usar % ERRORLEVEL% en condicionales, por ejemplo:

 si% ERRORLEVEL% NEQ 0 echo Errorlevel no es igual a cero, el último comando falló. 

Consejo: NEQ es el operador relacional que significa "no igual a".

Nota:% ERRORLEVEL% no siempre es correcto

% ERRORLEVEL% no es lo mismo que si [ no ] errorlevel, y los dos valores no son siempre los mismos. Específicamente, % ERRORLEVEL% no siempre se actualiza cuando cambia el nivel de error. Para obtener más información, consulte esta publicación de blog de MSDN por Raymond Chen.

Por esta razón, si está probando errorlevel en un entorno de producción, es mejor usarlo si [ no ] errorlevel .

Herramienta de búsqueda de nivel de error

Para usuarios avanzados y desarrolladores de software, Microsoft ha lanzado una herramienta de búsqueda de nivel de error de línea de comandos, err.exe . Le permite buscar niveles de error por número o nombre interno, y restringir su búsqueda por el archivo de encabezado en el que se define el nivel de error.

 err /winerror.h 0 
 # winerror.h seleccionado. # para hex 0x0 / decimal 0: ERROR_SUCCESS winerror.h # La operación se completó con éxito. NO_ERROR winerror.h SEC_E_OK winerror.h S_OK winerror.h Se encontraron 4 coincidencias para "0" 
 err /cmdmsg.h 9009 
 # cmdmsg.h seleccionado. # para decimal 9009 / hex 0x2331: MSG_DIR_BAD_COMMAND_OR_FILE cmdmsg.h # '% 1' no se reconoce como comando interno o externo, # programa ejecutable o archivo por lotes. # 1 coincidencias encontradas para "9009" 

Puede descargar la herramienta directamente desde Microsoft.

Términos de programación