अपने प्रश्न में, आप उल्लेख करते हैं:
"... यह आउटपुट को एक फाइल में डालेगा लेकिन वास्तव में इसे निष्पादित नहीं करेगा। मेरे मामले में मुझे इसे निष्पादित करने की आवश्यकता होगी और बाद में संदर्भ के लिए फाइल में लॉग इन किया जाएगा।"
चूंकि आप कहते हैं कि प्रोग्राम चल रहा है और इसका आउटपुट फ़ाइल में डाला जा रहा है, मैंने सोचा कि आपने "निष्पादित" के बजाय "प्रदर्शित" किया होगा ।
यदि वह वह नहीं है जो आप का मतलब है, तो यह शायद मदद करता था यदि उसे बेहतर तरीके से समझाया जाता, शायद कुछ नमूना आउटपुट के साथ।
किसी भी मामले में, मैं इस उत्तर को पोस्ट कर रहा हूं यदि कोई अन्य व्यक्ति है जो इस प्रश्न / उत्तर को सहायक पाता है।
तो, मूल रूप से, ऐसा लगता है कि आप चाहते हैं कि स्क्रिप्ट का आउटपुट किसी फ़ाइल पर कब्जा कर लिया जाए, और स्क्रिप्ट चालू होने के दौरान स्क्रीन पर स्क्रिप्ट का आउटपुट देखने में भी सक्षम हो।
(tl; डॉ। वर्जन: वाइनरी का उपयोग करें , जैसे:
script 2>&1 | wtee logfile.txt
)
इस पोस्ट के लिए, मैं एक छोटी सी टेस्ट बैच फ़ाइल का उपयोग करूंगा, लेकिन आपकी स्क्रिप्ट उतनी ही बड़ी और जटिल हो सकती है जितनी आपको आवश्यकता हो:
C:\>type a.cmd
@echo off
echo Command: "dir /b a*"
dir /b a*
echo.
echo Command: "dir /b non-existant-file"
dir /b non-existant-file
echo.
यह तब होता है जब मैं यह बैच स्क्रिप्ट चलाता हूं:
C:\>a.cmd
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
ध्यान दें कि परीक्षण स्क्रिप्ट में, "दिर" कमांड का पहला निष्पादन सफल है, और दूसरा विफल रहता है। मैं यह केवल यह दिखाने के लिए करता हूं कि जब आप अपनी स्क्रिप्ट चलाते हैं तो "त्रुटि संदेशों" के साथ क्या होगा।
यदि मैं स्क्रिप्ट चलाता हूं और आउटपुट कैप्चर करने के लिए पुनर्निर्देशन ( ">" ) का उपयोग करता हूं, तो मैं इसे देखूंगा
C:\>a.cmd > log.txt
File Not Found
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
C:\>
स्क्रिप्ट के चलने पर त्रुटि संदेश "फ़ाइल नहीं मिला" को स्क्रीन पर दिखाया गया था, और वास्तव में फ़ाइल में कैप्चर नहीं किया गया था। ऐसा इसलिए है क्योंकि "" "सामान्य आउटपुट को कैप्चर करता है" जिसे STDOUT स्ट्रीम में भेजा गया है। "त्रुटि संदेश" आम तौर पर STDERR स्ट्रीम में भेजे जाते हैं।
"सामान्य आउटपुट" और "एरर मैसेज" को कैप्चर करने के लिए, आपको STDERR स्ट्रीम को भी कैप्चर करना होगा, जो कि "2" द्वारा "2> और 1" में यहाँ कमांड में इंगित किया गया है:
C:\>a.cmd > log.txt 2>&1
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
यूनिक्स में, एक मानक कमांड है: "tee"
"टी" कमांड का उपयोग करके, आप एक प्रोग्राम से आउटपुट कैप्चर कर सकते हैं, और एक ही समय में स्क्रीन पर आउटपुट भी प्रदर्शित कर सकते हैं।
"टी" कमांड विंडोज़ के साथ मानक नहीं है, लेकिन आप यहां विंडोज़ के लिए "टी" का एक मुफ्त संस्करण डाउनलोड कर सकते हैं:
वाइनरी । डाउनलोड किया कार्यक्रम का नाम है: "wtee.exe"
।
आप "wtee.exe" प्रोग्राम का उपयोग करें जैसा कि नीचे दिखाया गया है।
यह स्क्रिप्ट आउटपुट को फ़ाइल "log.txt"
में पहले की तरह नामांकित करेगा, और यह स्क्रिप्ट चालू होने पर आउटपुट को स्क्रीन पर भी प्रदर्शित करेगा:
C:\>a.cmd 2>&1 | wtee log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
C:\>type log.txt
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found