Reindirizzare l’output dal file batch

Sto creando un file batch con alcuni semplici comandi per raccogliere informazioni da un sistema. Il file batch contiene i comandi per ottenere il tempo, le informazioni IP, gli utenti, ecc.

Ho assemblato tutti i comandi in un file batch e viene eseguito, ma mi piacerebbe che il file batch, quando viene eseguito, restituisca i risultati in un file di testo (log). C’è un comando che posso aggiungere al batch che lo farebbe?

Tieni presente che non voglio eseguire il batch da cmd, quindi redirect l’output; Voglio redirect l’output dall’interno del batch, se ansible.

Il semplice modo ingenuo (meno efficiente)

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

Un modo migliore: più facile da scrivere e più veloce.

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

Un altro buon modo

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

se vuoi redirect sia out che err stream

 dir >> a.txt 2>&1 

So che questo è un post più vecchio, ma qualcuno lo troverà in una ricerca su Google e sembra anche che alcune domande che l’OP ha chiesto nei commenti non siano state specificamente indirizzate. Inoltre, per favore andate piano con me dato che questa è la mia prima risposta pubblicata su SO. 🙂

Per redirect l’output in un file utilizzando un nome di file generato dynamicmente, il mio approccio go-to (leggi: rapido e sporco) è la seconda soluzione offerta da @dbenham. Quindi, ad esempio, questo:

 @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 ) 

Creerà un file come quello che vedi in questa schermata del file nella directory di destinazione

Questo conterrà questa uscita:

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

Inoltre, tieni presente che questa soluzione dipende dalle impostazioni locali, quindi fai attenzione a come / quando la utilizzi.

 @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" 

dovrebbe riempire il conto.

Se si desidera APPEND l’output, utilizzare >> anziché > . > avvierà un nuovo file di registro.

C’è un piccolo programma interessante che puoi usare per redirect l’output a un file e alla console

 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 
 @echo OFF [your command] >> [Your log file name].txt 

Ho usato il comando sopra nel mio file batch e funziona. Nel file di registro, mostra i risultati del mio comando.