2012-11-15 16 views
14

के अंदर से stdout और stderr को पुनर्निर्देशित करें क्या इसके अंदर से बैच फ़ाइल के लिए stdout और stderr को पुनर्निर्देशित करने का कोई तरीका है।एक बैच फ़ाइल

मैं

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

की तरह कुछ कहाँ दोनों Some text, और a.exe, b.exe और c.exe के उत्पादन stdout.log

होना तय था की कल्पना कर रहा हूँ यह संभव है?

उत्तर

25

यह तुलना में यह (संलग्न) के साथ रीडायरेक्ट करने के लिए प्रत्येक व्यक्ति के आदेश है आदेशों का पूरा संग्रह के लिए एक बार पुन: निर्देशित करने और अधिक कुशल है। पुनर्निर्देशन को मापने में समय लगता है। यह कुछ पुनर्निर्देशित आदेशों के लिए उल्लेखनीय नहीं हो सकता है, लेकिन यदि कई पुनरावृत्तियों के साथ एक लूप में किया जाता है, तो यह काफी महत्वपूर्ण हो सकता है।

एक विधि कोष्ठकों के भीतर पुनः निर्देशित आदेशों की पूरे ब्लॉक लगा और कोष्ठक

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

एक अन्य विकल्प सबरूटीन में अपने आदेश रखा है और कॉल पुनर्निर्देशित करना होता है बाहर रीडायरेक्ट करना होता है

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

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

लॉग फ़ाइल नाम को एक चर में रखने का तरीका क्या है? – domih

6

हाँ, आप रीडायरेक्ट करने के लिए अपनी फ़ाइल (1>> %STDOUT%) को stdout संलग्न करें और stdout में stderr कनेक्ट (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 कि आपके प्रश्न जरूरी दोनों stderr लेखन संकेत नहीं करता है और एक ही फाइल में stdout। तो संपूर्णता के लिए, यहाँ एक संस्करण अलग फ़ाइलों में लिख दिया गया है:

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: आपको 'stderr' को' stdout' पर रीडायरेक्ट करने की आवश्यकता नहीं है ... यदि आप चाहते हैं कि आप उन्हें अलग-अलग लॉग पर रीडायरेक्ट कर सकें। –

+1

बेशक आपको यह नहीं करना है, लेकिन मैंने सोचा कि वह बिल्कुल ऐसा करना चाहता था: _... stdout ** और ** stderr को पुनर्निर्देशित करने के लिए ..._ – zb226

+0

हां, उन दोनों को रीडायरेक्ट करें लेकिन जरूरी नहीं है स्थान। कोई बात नहीं, मैं बस नाइटपिक कर रहा हूं ... –