En su pregunta, menciona:
"... colocará la salida en un archivo pero en realidad no la ejecutará. En mi caso, necesitaría que se ejecute y luego inicie sesión en un archivo para referencia posterior".
Como usted dice que el programa se está ejecutando y su salida se está colocando en el archivo, pensé que podría haber querido decir "mostrado" , en lugar de "ejecutado" .
Si eso no es lo que quisiste decir, entonces probablemente hubiera sido útil explicarlo mejor, tal vez con algún resultado de muestra.
En cualquier caso, estoy publicando esta respuesta en caso de que haya otros que consideren útil esta pregunta / respuesta.
Entonces, básicamente, parece que desea que la salida de una secuencia de comandos se capture en un archivo, y también poder ver la salida de la secuencia de comandos en la pantalla mientras se ejecuta la secuencia de comandos.
(tl; versión dr: use wintee , así:
script 2>&1 | wtee logfile.txt
)
Para esta publicación, usaré un pequeño archivo por lotes de prueba, pero su script podría ser tan grande y complicado o tan simple como lo necesite:
C:\>type a.cmd
@echo off
echo Command: "dir /b a*"
dir /b a*
echo.
echo Command: "dir /b non-existant-file"
dir /b non-existant-file
echo.
Esto es lo que sucede cuando ejecuto este script por lotes:
C:\>a.cmd
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
Observe que en el script de prueba, la primera ejecución del comando "dir" es exitosa y la segunda falla. Hago esto solo para mostrar lo que sucederá con los "mensajes de error" cuando ejecute su script.
Si ejecuto el script y uso la redirección ( ">" ) para capturar la salida, veré esto
C:\>a.cmd > log.txt
File Not Found
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
C:\>
Observe que el mensaje de error "Archivo no encontrado" se mostró en la pantalla cuando se ejecutó la secuencia de comandos, y en realidad no se capturó en el archivo. Esto se debe a que ">" captura la "salida normal" que se ha enviado a la secuencia STDOUT. Los "mensajes de error" se envían normalmente a la secuencia STDERR.
Para capturar "salida normal" y "mensajes de error", también debe capturar la secuencia STDERR, que se indica mediante el "2" en "2> & 1" en el comando aquí:
C:\>a.cmd > log.txt 2>&1
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
En unix, hay un comando estándar: "tee"
Usando el comando "tee", puede capturar la salida de un programa, y también mostrar la salida en la pantalla, al mismo tiempo.
El comando "tee" no es estándar con Windows, pero puede descargar una versión gratuita de "tee" para Windows aquí:
wintee . El programa descargado se llama: "wtee.exe"
.
Utiliza el programa "wtee.exe" como se muestra a continuación.
Esto capturará la salida del script en el archivo nombrado "log.txt"
como antes, y también mostrará el resultado en la pantalla mientras se ejecuta el script:
C:\>a.cmd 2>&1 | wtee log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found