Solución:
Quieres:
dir > a.txt 2>&1
La sintaxis 2>&1
redirigirá 2
(stderr) a 1
(salida estándar). También puede ocultar mensajes redirigiéndolos a NUL
, más explicaciones y ejemplos en MSDN.
La respuesta de Anders Lindahl es correcta, pero debe tenerse en cuenta que si está redirigiendo stdout a un archivo y desea redirigir stderr también, DEBE asegurarse de que 2>&1
está especificado DESPUÉS los 1>
redireccionar, de lo contrario no funcionará.
REM *** WARNING: THIS WILL NOT REDIRECT STDERR TO STDOUT ****
dir 2>&1 > a.txt
Información de antecedentes de MSKB
Si bien la respuesta aceptada a esta pregunta es correcta, realmente no explica mucho por qué Funciona, y dado que la sintaxis no es clara de inmediato, hice una búsqueda rápida en Google para averiguar qué estaba pasando realmente. Con la esperanza de que esta información sea útil para otros, la estoy publicando aquí.
Tomado de MS Support KB 110930.
De MSKB110930
Redirigir mensajes de error desde el símbolo del sistema: STDERR / STDOUT
Resumen
Al redirigir la salida de una aplicación usando el símbolo ‘>’, los mensajes de error aún se imprimen en la pantalla. Esto se debe a que los mensajes de error se envían a menudo al flujo de error estándar en lugar del flujo de salida estándar.
La salida de una aplicación o comando de consola (símbolo del sistema) a menudo se envía a dos flujos separados. La salida normal se envía a Standard Out (STDOUT) y los mensajes de error se envían a Standard Error (STDERR). Cuando redirige la salida de la consola usando el símbolo “>”, solo está redirigiendo STDOUT. Para redirigir STDERR debe especificar ‘2>’ para el símbolo de redirección. Esto selecciona el segundo flujo de salida que es STDERR.
Ejemplo
El comando
dir file.xxx
(dóndefile.xxx
no existe) mostrará la siguiente salida:Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876 File Not Found
Si redirige la salida a la
NUL
dispositivo usandodir file.xxx > nul
, seguirá viendo el mensaje de error como parte de la salida, así:File Not Found
Para redirigir (solo) el mensaje de error a
NUL
, use el siguiente comando:dir file.xxx 2> nul
O puede redirigir la salida a un lugar y los errores a otro.
dir file.xxx > output.msg 2> output.err
Puede imprimir los errores y la salida estándar en un solo archivo utilizando el comando “& 1” para redirigir la salida de STDERR a STDOUT y luego enviar la salida de STDOUT a un archivo:
dir file.xxx 1> output.msg 2>&1