batch file - यदि मैं कार्य शेड्यूलर द्वारा चलाया जा रहा है, तो मैं स्क्रिप्ट के आउटपुट को कैप्चर कैसे करूं?




batch-file scheduled-tasks (5)

विंडोज सर्वर 2008 का उपयोग करके, मैं विंडोज़ टास्क शेड्यूलर के साथ चल रहे स्क्रिप्ट के आउटपुट को कैप्चर करने के बारे में कैसे जा सकता हूं?

मैं एक लंबे समय तक कस्टम प्रिंटिंग बैच-स्क्रिप्ट का परीक्षण कर रहा हूं, और डिबगिंग उद्देश्यों के लिए, मैं हर रात इसके सभी आउटपुट देखना चाहता हूं।


Cmd / c और कस्टम टाइमस्टैम्प का प्रयास करें

यहां दूसरों द्वारा उत्तरों का निर्माण करने के लिए, हो सकता है कि आउटपुट फ़ाइल जिसे आप बनाना चाहते हैं, आउटपुट फ़ाइल के नाम पर एम्बेड की गई तिथि या समय हो। CMD.exe साथ इस प्रकार हासिल किया जा सकता है। ध्यान दें कि यह तकनीक आंतरिक विंडोज वातावरण चर के स्ट्रिंग आउटपुट लेती है और उन्हें चरित्र स्थिति के आधार पर स्लाइस करती है, इसलिए यह आपके द्वारा उपयोग किए जाने वाले विंडोज़ क्षेत्र के लिए सही नहीं हो सकता है। यह तकनीक एक विंडोज़ क्षेत्र से निपटने के लिए सीमित है। उदाहरण के लिए, यूके के लिए अमेरिका के लिए क्या काम करता है, इस बात के मतभेदों के कारण कि प्रत्येक क्षेत्र के लिए तिथि और / या समय किस प्रकार प्रारूपित होता है। PowerShell अधिक शक्तिशाली है कि यह विभिन्न विंडोज क्षेत्रों से निपट सकता है, और PowerShell CMD.exe को .cmd फ़ाइलों को चलाने के लिए आमंत्रित कर सकता है, लेकिन यह इस उत्तर के दायरे से बाहर है।

CMD.EXE का प्रयोग करना

आप आंतरिक पर्यावरण चर %%% और %time% को स्लाइस करके दिनांक और समय के विभिन्न घटकों तक पहुंच सकते हैं, निम्नानुसार (फिर से, सटीक स्लाइसिंग मान विंडोज़ में कॉन्फ़िगर किए गए क्षेत्र पर निर्भर हैं):

  • वर्ष: %date:~10,4%
  • महीना: %date:~4,2%
  • दिन: %date:~7,2%
  • घंटा: %time:~0,2%
  • मिनट: %time:~3,2%
  • दूसरा: %time:~6,2%

मान लीजिए कि आप अपनी लॉग फ़ाइल को " Log_[yyyyMMdd]_[hhmmss].txt " Log_[yyyyMMdd]_[hhmmss].txt करना चाहते हैं, तो आप निम्न का उपयोग करेंगे:

Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt

इसका परीक्षण करने के लिए, निम्न कमांड लाइन चलाएं:

cmd /c echo Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt

इसे सभी को एक साथ रखकर, अपनी स्क्रिप्ट से stdout और stderr को वर्तमान दिनांक और समय के साथ नामित एक लॉग फ़ाइल में रीडायरेक्ट करने के लिए, निम्न आदेश पंक्ति के रूप में निम्न का उपयोग करें:

cmd /c YourProgram.cmd > Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt 2>&1

संपादित करें: सावधानी: टाइम स्टैम्प में रिक्त स्थान हो सकता है!

जैसा कि @ user25064 ने इंगित किया है, कभी-कभी समय के घंटे के हिस्से में नून एक प्रमुख स्थान के साथ दिखाई दे सकता है। इसलिए, फ़ाइल नाम कमांड प्रोसेसर को ट्रिप करने से रोकने के लिए उद्धरणों में लपेटा जाना चाहिए, जैसा कि निम्नानुसार है:

cmd /c YourProgram.cmd > "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1

@ User2744787 के उत्तर को पूरक करने के लिए, एक अनुसूचित कार्य में तर्क के साथ cmd का उपयोग करने का तरीका दिखाने के लिए यहां एक स्क्रीनशॉट है:


आप उन लाइनों पर लॉग फ़ाइल पर लिख सकते हैं जिन्हें आप आउटपुट करना चाहते हैं:

@echo off
echo Debugging started >C:\logfile.txt
echo More stuff
echo Debugging stuff >>C:\logfile.txt
echo Hope this helps! >>C:\logfile.txt

इस तरह आप चुन सकते हैं कि कौन से कमांड आउटपुट आउटपुट हैं यदि आप सब कुछ के माध्यम से ट्रैवल नहीं करना चाहते हैं, तो बस आपको जो देखने की ज़रूरत है उसे प्राप्त करें। > इसे निर्दिष्ट फ़ाइल में आउटपुट करेगा (फ़ाइल बनाकर अगर यह अस्तित्व में नहीं है और अगर यह करता है तो इसे ओवरराइट कर रहा है)। >> निर्दिष्ट फ़ाइल में संलग्न होगा (फाइल बनाकर अगर यह अस्तित्व में नहीं है लेकिन सामग्री में संलग्न होने पर)।


आपके पास debug.cmd हो सकता है जो yourscript.cmd को कॉल करता है

yourscript.cmd > logall.txt

आप yourscript.cmd के बजाय debug.cmd शेड्यूल करते हैं


>> प्रत्येक बार इसे ओवरराइट करने के बजाय लॉग फ़ाइल जोड़ देगा। 2>&1 आपकी लॉग फ़ाइल में त्रुटियां भी भेजेगा।

cmd /c YourProgram.exe >> log.txt 2>&1




capture