No olvides que en la informática cualquier problema casi siempre tiene varias soluciones, por lo tanto nosotros compartimos lo mejor y más óptimo.
TechNet sugiere este resumen para convertir el código de salida en un código de salida más tradicional:
(robocopy c:dirA c:dirB *.*) ^& IF %ERRORLEVEL% LEQ 1 exit 0
O esto para ignorar el código de salida por completo (es decir, no importa si falló o tuvo éxito):
(robocopy c:dirA c:dirB *.*) ^& exit 0
Sin embargo, los dos comandos anteriores finalizarán un script después de que se haya ejecutado la robocopia. Este es un problema especialmente para las compilaciones de CI. Si desea utilizar robocopy en este escenario, debe configurar el código de error manualmente para los códigos de salida irrelevantes. A continuación, todos los códigos de error por debajo de 8 se reescribirán sin ningún error y, si es posible, se continuará con el script.
(robocopy c:dirA c:dirB *.*) ^& IF %ERRORLEVEL% LSS 8 SET ERRORLEVEL = 0
Según aquí, Robocopy tiene los siguientes bits de código de salida que componen el código de salida:
0×10 Error grave. Robocopy no copió ningún archivo. Esto es un error de uso o un error debido a privilegios de acceso insuficientes en los directorios de origen o de destino.
0×08 No se pudieron copiar algunos archivos o directorios (se produjeron errores de copia y se superó el límite de reintentos). Verifique estos errores más a fondo.
0×04 Se detectaron algunos archivos o directorios no coincidentes. Examine el registro de salida. La limpieza es probablemente necesaria.
0×02 Se detectaron algunos archivos o directorios adicionales. Examine el registro de salida. Es posible que se necesite algo de limpieza.
0×01 Uno o más archivos fueron copiados exitosamente (es decir, han llegado nuevos archivos).
0×00 No se produjeron errores y no se realizó ninguna copia. Los árboles de directorios de origen y destino están completamente sincronizados.
Simplemente agregue declaraciones if/else que EXIT /B 0
cuando el valor de retorno es 1 o quizás 0, y EXIT /B 1
de lo contrario. Incluso si los archivos se han copiado, hay algo mal que necesitaría una intervención manual.
Ejecutarlo desde Jenkins necesita ambos ( )
y /B
. Si desea ignorar el nivel de error 1,2,3,4:
(robocopy XXX YYY) ^& IF %ERRORLEVEL% LEQ 4 exit /B 0
Si te apasiona la informática, eres capaz de dejar un artículo acerca de qué le añadirías a este post.