2010-01-11 13 views
20

Ich beende gerade ein Batch-Skript, das den Inhalt einer lokal bearbeiteten Website ins Internet überträgt.So blenden Sie die Stapelausgabe aus

Das Skript wird in einem Konsolenfenster geöffnet und gibt eine Menge Zeug aus, das der Administrator sehen muss, falls etwas schief geht. In diesem Fall wird die Ausgabe jedoch als E-Mail gesendet, so dass die Ausgabe nicht angezeigt werden muss und der Benutzer, der das Update ausführt, unnötig verwirrt wird. Ich muss nur ein paar Zeilen anzeigen (zB "Synchronisation starten ..." und "Synchronisation abgeschlossen").

Kann jemand an eine Möglichkeit denken, die Ausgabe in einem Batch-Skript zu stoppen? Irgendwie ein "Echo-Off"?

Eine einfache

my_batch_file > nul 

wird es nicht schneiden, denn wie gesagt, ein paar Dinge, die ich zeigen müssen.

Antwort

34

Windows Nul tatsächlich den Begriff der stdout und stderr hat. Hier ein Beispiel:

test.bat:

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

Wenn Sie es als 'test.bat' laufen werden Sie die volle Leistung erhalten. Wenn Sie es als 'test.bat >nul' ausführen, erhalten Sie nur die 'wichtige' Ausgabe (alles umgeleitet zu stderr, mit der> & 2)

+0

Hah, das funktioniert perfekt für mich. Vielen Dank! –

0

Sie könnten die wenigen Dinge, die angezeigt werden müssen, an stderr anstelle von stdout schreiben.

Alternativ können Sie die Ausgänge der einzelnen Teile, die Sie ausblenden möchten, umleiten.

+0

Sorry, ich habe mein Beispiel verwechselt, ich bin auf einem Windows-System hier. Funktioniert das nicht dort? –

+2

Oh, Sie sprechen über eine literale Batch-Datei. In diesem Fall könnten Sie die Teile, die nicht angezeigt werden sollen, in ein separates Batch-Skript aufteilen und von Ihrem primären Skript aufrufen, um die Ausgabe umzuleiten. Beachten Sie auch das '@' Präfix, das den Befehl selbst daran hindert, gedruckt zu werden. –

7

Batch-Skript selbst

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

stdout des zweiten Aufruf laufen konnte geht

Verwandte Themen