txt tuberias pipes guardar windows batch-file cmd batch-processing

windows - tuberias - Redirigir la salida desde dentro del archivo por lotes



pipes en linux (6)

Hay un pequeño programa genial que puede usar para redirigir la salida a un archivo y la consola

some_command ^| TEE.BAT [ -a ] filename

@ECHO OFF :: Check Windows version IF NOT "%OS%"=="Windows_NT" GOTO Syntax :: Keep variables local SETLOCAL :: Check command line arguments SET Append=0 IF /I [%1]==[-a] ( SET Append=1 SHIFT ) IF [%1]==[] GOTO Syntax IF NOT [%2]==[] GOTO Syntax :: Test for invalid wildcards SET Counter=0 FOR /F %%A IN (''DIR /A /B %1 2^>NUL'') DO CALL :Count "%%~fA" IF %Counter% GTR 1 ( SET Counter= GOTO Syntax ) :: A valid filename seems to have been specified SET File=%1 :: Check if a directory with the specified name exists DIR /AD %File% >NUL 2>NUL IF NOT ERRORLEVEL 1 ( SET File= GOTO Syntax ) :: Specify /Y switch for Windows 2000 / XP COPY command SET Y= VER | FIND "Windows NT" > NUL IF ERRORLEVEL 1 SET Y=/Y :: Flush existing file or create new one if -a wasn''t specified IF %Append%==0 (COPY %Y% NUL %File% > NUL 2>&1) :: Actual TEE FOR /F "tokens=1* delims=]" %%A IN (''FIND /N /V ""'') DO ( > CON ECHO.%%B >> %File% ECHO.%%B ) :: Done ENDLOCAL GOTO:EOF :Count SET /A Counter += 1 SET File=%1 GOTO:EOF :Syntax ECHO. ECHO Tee.bat, Version 2.11a for Windows NT 4 / 2000 / XP ECHO Display text on screen and redirect it to a file simultaneously ECHO. IF NOT "%OS%"=="Windows_NT" ECHO Usage: some_command ³ TEE.BAT [ -a ] filename IF NOT "%OS%"=="Windows_NT" GOTO Skip ECHO Usage: some_command ^| TEE.BAT [ -a ] filename :Skip ECHO. ECHO Where: "some_command" is the command whose output should be redirected ECHO "filename" is the file the output should be redirected to ECHO -a appends the output of the command to the file, ECHO rather than overwriting the file ECHO. ECHO Written by Rob van der Woude ECHO http://www.robvanderwoude.com ECHO Modified by Kees Couprie ECHO http://kees.couprie.org ECHO and Andrew Cameron

Estoy creando un archivo por lotes con algunos comandos simples para recopilar información de un sistema. El archivo por lotes contiene comandos para obtener la hora, información de IP, usuarios, etc.

Reuní todos los comandos en un archivo de proceso por lotes, y se ejecuta, pero me gustaría que el archivo por lotes, cuando se ejecutara, genere los resultados en un archivo de texto (registro). ¿Hay algún comando que pueda agregar al lote que lo haga?

Tenga en cuenta que no quiero ejecutar el lote desde cmd, luego redirijo la salida; Quiero redirigir la salida desde dentro del lote, si eso es posible.


La manera ingenua simple (menos eficiente)

@echo off command1 >output.txt command2 >>output.txt ... commandN >>output.txt

Una mejor manera: más fácil de escribir y más rápido.

@echo off >output.txt ( command1 command2 ... commandN )

Otra buena forma

@echo off call :sub >output.txt exit /b :sub command1 command2 ... commandN


Sé que esta es una publicación más antigua, pero alguien se encontrará con ella en una búsqueda en Google y también parece que algunas preguntas que el OP hizo en los comentarios no fueron abordadas específicamente. Además, por favor, trátame, ya que esta es mi primera respuesta publicada en SO. :)

Para redirigir el resultado a un archivo usando un nombre de archivo generado dinámicamente, mi enfoque go-to (leer: rápido y sucio) es la segunda solución ofrecida por @dbenham. Entonces, por ejemplo, esto:

@echo off > filename_prefix-%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log ( echo Your Name Here echo Beginning Date/Time: %DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log REM do some stuff here echo Your Name Here echo Ending Date/Time: %DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log )

Creará un archivo como el que ve en esta captura de pantalla del archivo en el directorio de destino

Eso contendrá este resultado:

Your Name Here Beginning Date/Time: 2016-09-16_141048.log Your Name Here Ending Date/Time: 2016-09-16_141048.log

También tenga en cuenta que esta solución depende de la configuración regional, así que tenga cuidado de cómo y cuándo la usa.


si quieres redireccionar tanto las corrientes de salida como las de errar

dir >> a.txt 2>&1


@echo off >output.txt ( echo Checking your system infor, Please wating... systeminfo | findstr /c:"Host Name" systeminfo | findstr /c:"Domain" ipconfig /all | find "Physical Address" ipconfig | find "IPv4" ipconfig | find "Default Gateway" ) @pause


echo some output >"your logfile"

o

( echo some output echo more output )>"Your logfile"

debe llenar la factura.

Si desea APPEND la salida, use >> lugar de > . > comenzará un nuevo archivo de registro.