Una de las formas más útiles de registrar y solucionar el comportamiento de los comandos o los trabajos por lotes que se ejecutan en Windows es redirigir la salida a un archivo.
Sin embargo, hay algunas formas diferentes de redirigir las escrituras de la línea de comandos a un archivo. La opción que elija depende de cómo quiera ver la salida de su comando.
- Cómo funciona la salida del símbolo del sistema de Windows
- Redirigir la salida estándar a un nuevo archivo
- Redirigir las escrituras de salida estándar al mismo archivo
- Redirigir el error estándar a un archivo
- Redirigir todas las escrituras de salida a un mismo archivo
- Silenciar los flujos de salida estándar o de error
Cómo funciona la salida del símbolo del sistema de Windows
Cuando escribe un comando en la consola de Windows (símbolo del sistema), la salida de ese comando va a dos flujos separados.
- STDOUT: La salida estándar es donde van las respuestas estándar de los comandos. Por ejemplo, la respuesta estándar para el comando DIR es una lista de archivos dentro de un directorio.
- STDERR: Standard Error es donde van los mensajes de error si hay un problema con el comando. Por ejemplo, si no hay ningún archivo en el directorio, el comando DIR mostrará «Archivo no encontrado» en el flujo de error estándar.
Puede redirigir la salida a un archivo en Windows para estos dos flujos de salida.
Redirigir la salida estándar a un nuevo archivo
Hay dos maneras de redirigir la salida estándar de un comando a un archivo. La primera es enviar la escritura de salida del comando a un nuevo archivo cada vez que se ejecuta el comando.
Para ello, abra el símbolo del sistema y escriba:
dir test.exe > myoutput.txt
El carácter > indica a la consola que la salida STDOUT al archivo con el nombre que ha proporcionado.
Cuando ejecute este comando, notará que no hay ninguna respuesta en la ventana de comandos, excepto el error de que el archivo no existe.
Esto se debe a que la salida estándar del comando fue redirigida a un archivo llamado myoutput.txt. El archivo existe ahora en el mismo directorio donde se ejecutó el comando. La salida de error estándar sigue mostrándose como lo hace normalmente.
Nota: Tenga cuidado de cambiar el directorio activo para el símbolo del sistema antes de ejecutar el comando. De esta manera sabrá dónde se almacenan los archivos de salida.
Puede ver la salida estándar que fue al archivo escribiendo «myoutput.txt» en la ventana de comandos. Esto abrirá el archivo de texto en su visor de archivos de texto por defecto. Para la mayoría de la gente, esto suele ser Notepad.exe.
La próxima vez que ejecute el mismo comando, el archivo de salida anterior se eliminará. Se volverá a crear un nuevo archivo de salida con la salida del último comando.
Redirigir las escrituras de salida estándar al mismo archivo
¿Qué pasa si no quiere sobrescribir el mismo archivo? Otra opción es utilizar >> en lugar de > para redirigir a un archivo de salida. En el caso de este ejemplo, escribirías:
dir test.exe >> myoutput.txt
Verás la misma salida (sólo el error).
Pero en este caso, en lugar de sobrescribir el archivo de salida, este comando anexa la nueva salida al archivo de salida existente.
Cada vez que ejecute un comando y anexe la salida a un archivo, escribirá la nueva salida estándar al final del archivo existente.
Redirigir el error estándar a un archivo
De la misma manera que puede redirigir las escrituras de salida estándar a un archivo, también puede dar salida al flujo de error estándar a un archivo.
Para hacer esto, tendrá que añadir 2> al final del comando, seguido por el archivo de error de salida que desea crear.
En este ejemplo, escribirá el comando:
dir test.exe > myoutput.txt 2> output.err
Esto envía el flujo de salida estándar a myoutput.txt, y el flujo de error estándar a output.err. El resultado es que no se muestra ningún flujo de salida en la ventana de la consola.
Sin embargo, puedes ver los mensajes de error escribiendo output.err. Esto abrirá el archivo en su visor de archivos de texto predeterminado.
Como puede ver, cualquier mensaje de error del comando se envía al archivo de error. Al igual que con la salida estándar, puede utilizar >> en su lugar para añadir el error a los errores de los comandos ejecutados anteriormente.
Redirigir todas las escrituras de salida a un mismo archivo
Todos los enfoques anteriores resultan en múltiples archivos. Un archivo es para el flujo de salida estándar y el otro es para el flujo de error estándar.
Si desea incluir ambas salidas en el mismo archivo, también puede hacerlo. Para ello, sólo tiene que redirigir toda la salida al mismo archivo utilizando el siguiente comando.
dir test.exe 1> myoutput.txt 2>&1
Así es como funciona este comando:
- La salida estándar se dirige al archivo de salida identificado por el número de salida 1.
- La salida de error estándar identificada por el número 2 se redirige al archivo de salida identificado por el número 1.
Esto añadirá la salida de error al final de la salida estándar.
Esta es una forma útil de ver toda la salida de cualquier comando en un solo archivo.
Silenciar los flujos de salida estándar o de error
También puede desactivar la salida estándar o el error estándar redirigiendo la salida a un NUL en lugar de a un archivo.
Siguiendo el ejemplo anterior, si sólo quiere la Salida Estándar y ningún Error Estándar, puede utilizar el siguiente comando:
dir test.exe 1> myoutput.txt 2>nul
Esto resultará en el mismo archivo de salida que el primer ejemplo anterior donde sólo redirigió la Salida Estándar, pero con este comando el error no hará eco dentro de la consola. Tampoco creará un archivo de registro de errores.
Esto es útil si no te importa ningún error y no quieres que se convierta en una molestia.
Puedes realizar cualquiera de los mismos comandos de salida anteriores desde dentro de un archivo BAT y la salida de esa línea irá al archivo de salida que especifiques. Esta es una forma útil de ver si algún comando dentro de un archivo BAT tuvo algún error cuando intentó ejecutarse.