2012-11-15 20 views

cevap

25

. Yönlendirmeyi yönlendirmek zaman alır. Birkaç yönlendirilmiş komut için fark edilebilir olmayabilir, ancak çok sayıda yineleme ile bir döngüde yapılırsa, oldukça önemli olabilir.

bir yöntem parantez içinde yeniden yönlendirilen komutları bloğunun tamamını kapsamak ve

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

Diğer bir seçenek çağrı bir altprogramda komutlarınızı koymak ve yönlendirmek olduğunu parantez dışında yöneltmek olan

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

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

Günlük dosya adını bir değişkene koymanın yolu nedir? – domih

6

Evet, yönlendirmek ve dosyanızın (1>> %STDOUT%) stdout ekler ve Stdout'a (2>&1) stderr'yi bağlamak gerekir:

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 

doğru soru mutlaka hem stderr'yi yazma anlamına gelmediğini kaydetti @EitanT ve aynı dosyaya stdout. Yani şeyiyle burada ayrı dosyalar halinde yazılı bir sürümü: O (append ile) her komutu yönlendirmek daha komutların tüm koleksiyonu için bir kez yeniden yönlendirmek için daha verimlidir

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: Eğer stderr '' stdout '' a yönlendirmek zorunda değilsiniz ... isterseniz onları ayrı kayıtlara yönlendirebilirsiniz. –

+1

Tabii ki bunu yapmak zorunda değilsiniz, ama tam olarak şunu yapmak istediğini sanmıştım: _... stdout ** ve ** stderr ... 'i yeniden yönlendirmek için ..._ – zb226

+0

Evet, her ikisini de aynı şekilde değil yer. Boşver, sadece nitpicking ... –

İlgili konular