2012-11-15 12 views
14

Czy istnieje sposób przekierowania stdout i stderr dla pliku wsadowego z wewnątrz niego.Przekierowanie stdout i stderr z pliku wsadowego

Wyobrażam sobie coś takiego

set STDOUT=stdout.log 
echo Some text 
a.exe 
b.exe 
c.exe 

Gdzie zarówno Some text i wyjście a.exe, b.exe i c.exe pójdzie do stdout.log

Czy to możliwe?

Odpowiedz

25

Jest bardziej wydajny przekierować raz dla całej kolekcji poleceń niż to jest przekierowanie (z append) każdego pojedynczego polecenia. Potrzeba czasu na zainicjowanie przekierowania. Może to nie być zauważalne dla kilku przekierowanych poleceń, ale jeśli zostanie wykonane w pętli z wieloma iteracjami, może stać się dość znaczące.

Jedną z metod jest ująć cały blok przekierowanych poleceń w nawiasach i przekierowanie poza nawiasami

>stdout.log 2>&1 (
    echo Some text 
    a.exe 
    b.exe 
    c.exe 
) 

Inną opcją jest umieszczenie poleceń w podprogramie i przekierować Wezwanie

call :redirect >stdout.log 2>&1 
exit /b 

:redirect 
echo Some text 
a.exe 
b.exe 
c.exe 
exit /b 
+0

Jaki jest sposób umieszczenia nazwy pliku dziennika w zmiennej? – domih

6

Tak, trzeba przekierować stdout i dołączyć do pliku (1>> %STDOUT%) i połączyć stderr do stdout (2>&1):

set STDOUT=stdout.log 
echo Some text 1>> %STDOUT% 2>&1 
a.exe 1>> %STDOUT% 2>&1 
b.exe 1>> %STDOUT% 2>&1 
c.exe 1>> %STDOUT% 2>&1 

@EitanT słusznie zauważył, że kwestia ta nie musi koniecznie oznaczać, pisząc zarówno stderr i wysyłać do tego samego pliku. Tak pod względem kompletności, oto wersja pisząc do oddzielone plików:

set STDOUT=stdout.log 
set STDERR=stderr.log 
echo Some text 1>> %STDOUT% 2>> %STDERR% 
a.exe 1>> %STDOUT% 2>> %STDERR% 
b.exe 1>> %STDOUT% 2>> %STDERR% 
c.exe 1>> %STDOUT% 2>> %STDERR% 
+1

+ 1: Nie musisz przekierowywać 'stderr' na' stdout' ... jeśli chcesz, możesz przekierować je do osobnych logów. –

+1

Oczywiście, że nie musisz, ale myślałem, że on chce dokładnie to zrobić: _... aby przekierować standardowe wyjście ** i ** stderr ... – zb226

+0

Tak, przekierować oba, ale niekoniecznie do tego samego Lokalizacja. Nieważne, po prostu podrywam ... –

Powiązane problemy