¿Cómo redirigir la salida estándar y salida de errores a un archivo en Windows? Respuesta corta: igual que en Linux.

Al lanzar programas y comandos desde la terminal de Windows (cmd.exe) es posible redirigir tanto la salida por pantalla como la salida de errores hacia uno o diferentes archivos de la misma forma en que se hace en los sistemas operativos de la familia Unix.

Veamos la salida estándar del comando dir (ls en Unix):

A modo de ejemplo, vamos a listar un directorio inexistente ("pepe"), para así generar un error en el comando:

A simple vista, toda la información resultante por pantalla parece parte de una misma salida. Sin embargo el mensaje "File Not Found" en la última línea pertenece a la salida de errores (stderr en Unix).

Al igual que en Unix, si se desea capturar y redirigir la salida de errores hacia un archivo, se debe utilizar el símbolo > precedido por el descriptor de archivo correspondiente a la salida de errores (2):

Cabe destacar que en Windows los descriptores de archivo se denominan file handles. Sin embargo los valores correspondientes a STDIN, STDOUT y STDERR son idénticos a los que utiliza Unix (0, 1 y 2 respectivamente).

En el ejemplo anterior, se ha redirigido la salida de errores (2>) hacia el archivo D:\pepe.err. Se observa que la salida estándar permanece idéntica, pero el mensaje de error "File Not Found" no aparece por pantalla, sino que se envía a dicho archivo.

A su vez es posible redirigir, tanto la salida estándar como la salida de errores, a archivos individuales:

En este ejemplo se envía la salida estándar al archivo D:\pepe.log y la salida de errores al archivo D:\pepe.err.

Si se desea enviar ambas salidas a un mismo archivo, se utiliza una redirección idéntica a la que se suele utilizar en sistemas Unix:

C:\> COMANDO > archivo.txt 2>&1

De esta forma se envía la salida estándar al archivo archivo.txt y la salida de errores a la salida estándar. El efecto es que une toda salida en un mismo archivo.

Por último, recordar que cuando se utiliza un sólo símbolo mayor (>), se sobrescribe todo el contenido del archivo destino. Si en cambio se desa concatenar al archivo, utilizar doble mayor (>>).

Ejemplos:

C:\> COMANDO >> salida.txt
C:\> COMANDO 2>> errores.txt
C:\> COMANDO >> salida.txt 2>> errores.txt
C:\> COMANDO >> archivo.txt 2>&1

Referencias


Tal vez pueda interesarte


Compartí este artículo