2010-07-21 20 views
5

Tengo un archivo por lotes que hace varias cosas. Si uno de ellos falla, quiero salir de todo el programa. Por ejemplo:¿Cómo salir de un programa de lote por error?

@echo off 
type foo.txt 2>> error.txt >> success.txt 
mkdir bob 

Si no se encuentra el archivo de foo.txt entonces quiero el mensaje stderr anexa al archivo error.txt, de lo contrario el contenido de foo.txt se añade al success.txt. Básicamente, si el comando type devuelve un stderr, entonces quiero que el archivo por lotes salga y no cree un nuevo directorio. ¿Cómo puede saber si ocurrió un error y decidir si necesita continuar con el próximo comando o no?

+0

he añadido el código SI NO ERRORLEVEL 0 EXIT/B echo% errorlevel% antes del comando mkdir bob, pero independientemente del valor de ERRORLEVEL (es decir 0 o 1) el directorio aún se crea. Básicamente, ERRORLEVEL se establece con un valor diferente si el comando de tipo encuentra el archivo o no, pero el programa no está saliendo. ¿Pensamientos? – Notorious2tall

Respuesta

10

uso ERRORLEVEL para comprobar el código de salida del comando anterior:

if ERRORLEVEL 1 exit /b 

EDITAR: documentación dice "condición se cumple si el código de salida de la última orden es igual o mayor que X" (que puede verificar esto con if /?). Aparte de esto, también se puede comprobar si existe el archivo con

if exist foo.txt echo yada yada 

para ejecutar multple comandos si la condición es verdadera:

if ERRORLEVEL 1 (echo error in previous command & exit /b) 

o

if ERRORLEVEL 1 (
    echo error in previous command 
    exit /b 
) 
Cuestiones relacionadas