Windows: redirección de la línea de comandos al archivo de texto mientras se visualiza la salida

30

Estoy escribiendo un programa C en Windows, mi printf llama a print a la línea de comando, y sé que puedo redirigir toda esta salida a un archivo de texto usando:

myProgram.exe > mylog.txt

Sin embargo, deseo ver también el resultado que se habría impreso en la consola, así como registrarlo todo en un archivo de texto.

¿Hay alguna forma de hacer esto? Estaba pensando en usar tail para monitorear el archivo de registro.

usuario79397
fuente
Lo que he hecho a veces es abrir otra ventana de solicitud de cmd y ejecutar repetidamente el tipo mylog.txt (o podría hacer el bloc de notas mylog.txt) y ver cómo se desarrolla. Sin embargo, la camiseta parece genial.
barlop

Respuestas:

19

Windows PowerShell tiene una herramienta que puede hacer eso, llamada teeasí por la herramienta Unix que hace lo mismo.

Alternativamente, hay puertos de Unix teepara Windows:

lesmana
fuente
3
PowerShell es un gran consejo, ¡podría ser cmd solo para personas que aún no se han mudado! Usar gnuwin32 es mejor que usar unxutils, unxutils es bastante antiguo. gnuwin32 es más nuevo y probablemente también tenga todo en unxutils, y tiene muchas más utilidades. como se mencionó en otra parte, gnuwin32 coreutils tiene tee
barlop
Lo mismo funciona en CMDer, otra utilidad de línea de comandos de terceros.
Rauni
1
En esta respuesta superuser.com/a/273112/213743 BaconBits señala que la PowerShell camiseta está orientado a líneas: no va a salida de una línea "hasta que un carácter de fin de línea se alcanza" se encontró con carácter de nueva línea. BaconBits sugiere que la camiseta de Unix siempre reenvía contenido inmediatamente.
buzz3791
8

En Windows, todo lo que puedo pensar es hacer esto:

myProgram.exe > mylog.txt & type mylog.txt

Esto se basa en el ejemplo de comando en su pregunta: si de hecho desea agregar la salida a la mylog.txtque desea usar en >>lugar de >, pero typeimprimiría el archivo de registro completo, no solo lo que se ha agregado.

Si descarga GnuWin32 CoreUtils , puede usar el método Unix ( teecomando) para hacer esto:

myProgram.exe | tee mylog.txt

Esto escribirá la salida de myProgram.exe mylog.txtpero también la mostrará en la consola al mismo tiempo. Si solo desea agregar mylog.txt, puede pasar el -aparámetro a tee.

Garfio
fuente
2
La solución de tee se ve mucho mejor. La otra cosa que mencionas no es simultánea.
barlop
1
@barlop: estoy de acuerdo, la primera solución es una solución alternativa ya que no puedes hacerlo de forma nativa en Windows. tee hace el truco muy bien aquí :)
Gaff
Gracias por la ayuda, votada, yendo con tee pero lesmana llegó un par de minutos antes cuando mencionó tee :)
user79397
Si deja de lado 'type', abrirá el archivo en el editor predeterminado (el bloc de notas para mí) cuando se complete la tarea.
Josh Stribling
0

Uso Visual Studio Code y abro el archivo de registro desde allí, mantiene la vista actualizada casi en tiempo real a medida que cambia el archivo de registro

Jaime Botero
fuente
0

Simplemente tenía una necesidad similar y usé Tail como el OP sugirió que podrían:

>C:\Temp\Commands_Log.txt (
START tail.exe -f C:\Temp\Commands_Log.txt

Some_Commands
Other_Commands

echo.
echo ALL DONE HERE!
echo.
echo IT IS NOW SAFE TO CLOSE THIS WINDOW!
)

El "> C: \ Temp \ Commands_Log.txt" crea el archivo de registro y agrega la salida de todos los comandos ubicados dentro del (paréntesis).

El primer comando dentro de los paréntesis debe ser iniciar Tail, que se abrirá en una nueva ventana de comandos.

Los ecos al final son para que los usuarios desconocidos les avisen cuando todo esté completo.

DBADon
fuente