संपूर्ण बैच फ़ाइल आउटपुट लॉग करें


12

मैं एक कंप्यूटर पर कई सेटिंग्स को समायोजित करने के लिए कमांड लाइन स्क्रिप्ट का उपयोग कर रहा हूं। हालाँकि, मैं चाहूंगा कि पूरा आउटपुट भी .txt या .log फ़ाइल में लॉग इन हो।

जब मैं लॉगिंग सिस्टम के अपने मूल ज्ञान का उपयोग करता हूं तो यह आउटपुट को एक फाइल में डाल देगा लेकिन वास्तव में इसे निष्पादित नहीं करेगा। मेरे मामले में मुझे इसे निष्पादित करने की आवश्यकता होगी और फिर बाद के संदर्भ के लिए एक फ़ाइल में लॉग इन करना होगा।

क्या कोई मुझे बता पाएगा कि यह कैसे करना है?

अग्रिम में धन्यवाद! डेम्पसे


आपने एक ऑपरेटिंग सिस्टम भी निर्दिष्ट नहीं किया है!
माइकल हैम्पटन

जवाबों:


11

यदि प्रश्न स्क्रिप्ट को "निष्पादित" करने के लिए कहता है और संपूर्ण बैच फ़ाइल विंडोज 8.1 में लॉग फ़ाइल के लिए आउटपुट हो जाती है, तो यहां सरल उत्तर है:

अपनी बैच फ़ाइल की शुरुआत में इसे शामिल करें ...

@echo off
set LOGFILE=batch.log
call :LOG > %LOGFILE%
exit /B

:LOG
[ your script goes here ]

बहुत बड़िया धन्यवाद! (बेशक,% लोगिस% को वास्तव में यहाँ की आवश्यकता नहीं है ।: पी)
एंड्रयू २

1
मेरी स्क्रिप्ट में एक प्रश्न है - यदि यह प्रयोग किया जाता है तो मैं इसे नहीं देख रहा हूँ। निष्पादित करते समय स्क्रीन पर सब कुछ कैसे लॉग इन करें और देखें?
सिमोन

हाँ, आप ऐसा कैसे करेंगे ताकि आप इसे अपनी स्क्रीन पर देख सकें?
कार्ल-पुलिस

3

अपने प्रश्न में, आप उल्लेख करते हैं:

"... यह आउटपुट को एक फाइल में डालेगा लेकिन वास्तव में इसे निष्पादित नहीं करेगा। मेरे मामले में मुझे इसे निष्पादित करने की आवश्यकता होगी और बाद में संदर्भ के लिए फाइल में लॉग इन किया जाएगा।"

चूंकि आप कहते हैं कि प्रोग्राम चल रहा है और इसका आउटपुट फ़ाइल में डाला जा रहा है, मैंने सोचा कि आपने "निष्पादित" के बजाय "प्रदर्शित" किया होगा

यदि वह वह नहीं है जो आप का मतलब है, तो यह शायद मदद करता था यदि उसे बेहतर तरीके से समझाया जाता, शायद कुछ नमूना आउटपुट के साथ।

किसी भी मामले में, मैं इस उत्तर को पोस्ट कर रहा हूं यदि कोई अन्य व्यक्ति है जो इस प्रश्न / उत्तर को सहायक पाता है।

तो, मूल रूप से, ऐसा लगता है कि आप चाहते हैं कि स्क्रिप्ट का आउटपुट किसी फ़ाइल पर कब्जा कर लिया जाए, और स्क्रिप्ट चालू होने के दौरान स्क्रीन पर स्क्रिप्ट का आउटपुट देखने में भी सक्षम हो।

(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

0

यह स्क्रिप्ट ls निष्पादित करेगा और log.txt नामक फ़ाइल में इसका आउटपुट लॉग करेगा:

exec >log.txt 2>&1
ls

लॉग निष्पादित नहीं किया जाएगा।


1
ध्यान दें कि यह यूनिक्स / लिनक्स मानता है, लेकिन मेरा अनुमान है कि ओपी विंडोज के बारे में बात करता है। यह एक स्क्रिप्ट भी नहीं चल रहा है, लेकिन आपके द्वारा दर्ज किए गए आदेशों के आउटपुट को लॉग करना और पागलपन को रोकने के महत्वपूर्ण जानकारी को छोड़ देता है ...
स्वेन

मैं वास्तव में विंडोज के बारे में बात कर रहा हूँ। हालांकि धन्यवाद :)
डेम्पसे फॉक्सडी वैन एश
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.