¿Por qué cmd.exe tienen un comportamiento diferente nivel de error en una máquina de 64 bits?

StackOverflow https://stackoverflow.com/questions/1924497

  •  20-09-2019
  •  | 
  •  

Pregunta

Si hago una secuencia de comandos por lotes denominado temp.bat (por ejemplo) que contiene:

exit /b 1

Cuando corro de varias maneras, me sale un comportamiento diferente en mi sistema XP de 32 bits frente a un sistema de 64 bits de XP.

En 32 bits:

> temp.bat
> echo %ERRORLEVEL%
1
> cmd /c temp.bat
> echo %ERRORLEVEL%
0

En 64 bits:

> temp.bat
> echo %ERRORLEVEL%
1
> cmd /c temp.bat
> echo %ERRORLEVEL%
1

He buscado a través de las opciones de cmd.exe y he sido incapaz de encontrar las opciones que controlan la forma en que se propaga la información de nivel de error secuencias de comandos por lotes. En este momento soy incapaz de encontrar ninguna explicación racional para esta diferencia.

¿Fue útil?

Solución

Hay que tener cuidado con la salida / b, ya que en realidad no funciona correctamente en todos los casos. Por ejemplo:

temp.bat&&echo 0||echo 1

Si temp.bat contiene la salida / b 1 que se puede esperar de 1 a imprimir, pero no lo es. Lamentablemente, la única forma de establecer realmente un código de salida de trabajo de un archivo por lotes es utilizar @%COMSPEC% /C exit 1 como el última línea en el archivo por lotes

Otros consejos

El problema con el ejemplo de Anders es que utiliza un archivo .bat. Si se utiliza un archivo .cmd, salida funciona como se documenta.

El punto principal de tener tanto .bat y .cmd parece haber compatibilidad con versiones anteriores: si se trata de ejecutar un archivo .bat, cmd intenta emular el pre-NT CLI, command.com, que tenía el control de errores mucho más simple.

Al menos esa es mi conjetura. Me encontré con este hilo, mientras google para documentos oficiales sobre el .bat / .cmd cosa, que no puedo parecer encontrar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top