tags:

views:

203

answers:

4

I am putting the finishing touches to a batch script that transfers the contents of a locally edited web site to the internet.

The script opens in a console window, and outputs quite a lot of stuff the administrator needs to see in case something goes wrong. In that case, though, the output is being sent as E-Mail, so there is no need to display the output and confuse the user who runs the update unnecessarily. I need to display only a few lines (say, "starting synchronisation..." and "syncrhonisation complete").

Can anybody think of a way to stop output in a batch script? Kind of a total "echo off"?

A simple

my_batch_file > nul

won't cut it, because as I said, a few things I need to show.

A: 

You could write the few things that need showing to stderr instead of stdout.

Or alternatively, redirect the outputs of the individual parts that you want hidden.

Anon.
Sorry, I mixed up my example, I am on a Windows system here. Doesn't work there does it?
Pekka
Oh you're talking about a literal Batch file. In that case, you could separate the parts that you don't want showing into a separate Batch script, and call it from your primary one, redirecting the output. Also, keep in mind the `@` prefix, which stops the command itself from being printed.
Anon.
+1  A: 

your batch script could run itself

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

stdout of the second invocation goes to nul

jspcal
A: 

Output EVERY message with a level prefixed such as:

[L1] Hello
[L2] World!

You can then filter out certain levels by piping the output through another Python? script. In fact, I would use Python and not .bat.

Hamish Grubijan
+4  A: 

Windows actually does have the notion of stdout and stderr. Here's an example:

test.bat:

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

If you run it as 'test.bat' you'll get the full output. If you run it as 'test.bat >nul' then you'll only get the 'important' output (anything redirected to stderr, with the >&2)

davr
Hah, this works perfectly for me. Thanks!
Pekka