2010-01-11 14 views
20

Estoy dando los toques finales a un script por lotes que transfiere el contenido de un sitio web editado localmente a Internet.Cómo ocultar la salida por lotes

La secuencia de comandos se abre en una ventana de la consola y genera muchas cosas que el administrador necesita ver en caso de que algo salga mal. En ese caso, sin embargo, la salida se envía como correo electrónico, por lo que no es necesario mostrar la salida y confundir al usuario que ejecuta la actualización innecesariamente. Necesito mostrar solo unas líneas (por ejemplo, "comenzando la sincronización ..." y "sincronización completa").

¿Alguien puede pensar en una forma de detener la salida en un script por lotes? ¿Un tipo de "eco off" total?

Un simple

my_batch_file > nul 

no se corte, porque como he dicho, un par de cosas que tengo que mostrar.

Respuesta

34

de Windows en realidad tiene la noción de stdout y stderr. He aquí un ejemplo:

test.bat:

@echo off 
echo verbose stuff 1 
echo verbose stuff 2 
echo verbose stuff 3 
echo important stuff! >&2 
echo verbose stuff 4 

Si lo ejecuta como 'test.bat' obtendrá la salida completa. Si lo ejecuta como 'test.bat >nul', obtendrá la salida 'importante' (todo lo redirigido a stderr, con> & 2)

+0

Hah, esto funciona perfectamente para mí. ¡Gracias! –

0

Puede escribir las pocas cosas que deben mostrarse en stderr en lugar de stdout.

O alternativamente, redirija las salidas de las partes individuales que desea ocultar.

+0

Disculpe, he mezclado mi ejemplo, estoy en un sistema Windows aquí. ¿No funciona allí? –

+2

Oh, estás hablando de un archivo de Lotes literal. En ese caso, podría separar las partes que no desea mostrar en un script por lotes separado y llamarlo desde el primario, redireccionando el resultado. Además, tenga en cuenta el prefijo '@', que impide que el comando se imprima. –

7

la secuencia de comandos por lotes podría funcionar por sí mismo

@echo off 
if "%1" == "1" goto else 
echo start 
call %0 1 > nul 
echo done 
goto done 
:else: 
echo do stuff 
:done: 

la salida estándar de la segunda invocación va a Nul

Cuestiones relacionadas