¿Puedo crear un archivo por lotes que debería ejecutar el comando solo después de la ejecución exitosa del comando anterior?
Respuesta1
Depende de lo que entiendas por éxito. Si desea verificar si foo.exe
no devolvió ninguno.código de salidadistinto de 0, utilice:
@echo off
start /wait foo.exe
if errorlevel 0 (
start /wait bar.exe
)
para ejecutar bar.exe
después de foo.exe
devolver el código de salida 0
. Puede omitirlo start /wait
si la aplicación que está probando es de consola y no de escritorio.
Más información al respecto:¿Cómo obtengo el código de salida de la aplicación desde una línea de comando de Windows?, en respuestas deSamuel RenkertyGarry.
Respuesta2
además de la solución de nivel de error publicada por Hex y mejorada por el comentario de Michael.
Éste es aún más rápido para lo que quieres hacer.
primer comando && segundo comando
El segundo comando solo se ejecutará si el primer comando fue exitoso. es decir, si el primer comando no devolvió un error.
En el siguiente ejemplo, dir asfsds devuelve ese resultado pero también devuelve un error
Si ejecuta dir asdfsss & blah, se ejecutará blah independientemente de si el primer comando (dir sdsdf) arrojó un error o no.
Pero si los ejecuta con && entre ellos, si el primero es un error, no ejecutará el segundo. Se basa en la idea del álgebra booleana. Si A es verdadero y B es verdadero, entonces A Y B son verdaderos. Entonces, para saber si A y B son verdaderos, puedes verificar A y B, o podrías ser "vago" o eficiente, y simplemente marcar uno y, si es falso, sabrás que toda la expresión es falsa. Y si es cierto entonces tienes que comprobar el uno al otro. Entonces A && B verifica A y solo verifica B si tiene que verificar B, por lo que solo verifica B si B es verdadero. Pero ese concepto de álgebra booleana se aplica a los comandos, por lo que ejecuta el primero, el primero puede devolver un error o no, y si el primero devuelve un error entonces no intentará ejecutar y registrar el segundo. y si el primero no devuelve un error, intentará con el segundo. Sin duda, la expresión en sí devolvería verdadero (sin error) si ambos son verdaderos y falso (error) en caso contrario.
C:\Users\user>dir asdfsdf
El volumen en la unidad C no tiene etiqueta. El número de serie del volumen es B411-D580Directorio de C:\Users\usuario
Archivo no encontrado <---------------- Vea el resultado del directorio asdfdsds arriba
C:\Users\user>dir asdfsdf & echo a
Volumen en la unidad C no tiene etiqueta. El número de serie del volumen es B411-D580Directorio de C:\Users\usuario
Archivo no encontrado a <--- vea que se ejecutó el 'echo a'
C:\Users\user>dir asdfsdf && echo a
El volumen en la unidad C no tiene etiqueta. El número de serie del volumen es B411-D580Directorio de C:\Users\usuario
Archivo no encontrado
C:\Usuarios\usuario>
Si hizo dir filethatexists && echo a, verá que el primer comando se ejecuta correctamente y luego se ejecuta echo a. De manera similar, eco a && eco b