2012-07-20 16 views
5

पर रीडायरेक्ट करने के लिए रीडायरेक्ट करता है मेरे पास एक कमांड लाइन टूल है जो आमतौर पर आउटपुट के लगभग 200+ लाइनों को डंप करता है। मैं इस आउटपुट के अंत में दिखाई देने वाले पाठ की तलाश में हूं। जब मैं एक फाइल करने के लिए उत्पादन अनुप्रेषित:डॉस कमांड फ़ाइल ट्रंकेट्स आउटपुट

C:\> somecommand > results.txt 2>&1 

... केवल पहले 100 या तो उत्पादन की तर्ज इस फ़ाइल में दिखाई देता है। इसी तरह, अगर मैं आउटपुट को 'findstr' जैसे कुछ में पाइप करता हूं, तो प्राप्त करने वाला प्रोग्राम 100 वीं पंक्ति के बाद किसी भी पाठ को खोजने या संचालित करने में असमर्थ है।

शैल के लिए स्क्रीन बफर आकार सेटिंग्स को कैप्चर की जा सकने वाली रेखाओं की संख्या पर कोई प्रभाव नहीं पड़ता है।

कोई विचार क्या हो रहा है? इसके लायक होने के लिए, प्रश्न में कमांड iscmdbld.exe है installShield 2012 से।

यह समस्या अन्य आदेशों (जैसे 'dir') के साथ नहीं होती है।

प्रोग्राम से पूर्ण आउटपुट केवल cmd विंडो के भीतर कमांड चलाते समय देखा जा सकता है।

+0

शुरू में पुनर्निर्देशन कोशिश, बस बैठाना आदेश एक पैरामीटर के रूप में यह इलाज है - '> results.txt 2> & 1 somecommand' – SeanC

+0

उत्पादन जोड़कर प्रयास करें: C: \> somecommand >> results.txt 2> और 1 – DogLimbo

+0

मेरे पास अपने स्वयं के विज़ुअल सी ++ प्रोजेक्ट के साथ एक ही प्रोग्राम है। फ़ाइल पर पुनर्निर्देशित होने पर मेरे प्रोग्राम का आउटपुट छोटा हो जाता है। – Notinlist

उत्तर

0

एक और प्रयास ('>>') को जोड़ने के बजाय ताजा ('>') शुरू करना है। हालांकि, मैं नहीं सोच सकता कि आप अपनी समस्या के बारे में और जानने के बिना जो भी देख रहे हैं उसे उत्पन्न करने के लिए कैसे।

+0

एक छोटे प्रजनन कार्यक्रम का उत्पादन करने में विफल। मूल स्थिति मूल स्थिति में जगह पर है। प्रश्न की टिप्पणी में मेरे मामले में अधिक जानकारी जोड़ना। – Notinlist

1

मामले में यह एक और धारा लिए लिख रहा है में, इस प्रयास करें:

somecommand > results.txt 2>&1 3>&1 4>&1 5>&1 6>&1 7>&1 8>&1 9>&1 

अन्य संभावना है कि उपकरण उत्पादन के भाग के लिए प्रत्यक्ष स्क्रीन-लिखते का उपयोग कर रहा है - MSDOS दिनों में वहाँ थे स्क्रीन रीडिंग टीएसआर कार्यक्रम जो मदद कर सकते हैं।

2

दुर्भाग्यवश मेरे पास इंस्टालशल्ड स्थापित नहीं है इसलिए मेरे लिए कुछ परीक्षण चलाने के लिए काफी कठिन होगा, लेकिन मेरे पास उन कार्यक्रमों में कैम है जो इनपुट और आउटपुट को संभालने के लिए काम करते समय ऐसा नहीं कर रहे हैं। एक सामान्य मामले में ">" में कोई सीमा नहीं होनी चाहिए, मैं इसे विंडोज सर्वर पर बहुत उपयोग कर रहा हूं जो पृष्ठभूमि में भूत-स्क्रिप्ट और अन्य पुराने डॉस प्रोग्राम चला रहा है और आउटपुट को फ़ाइल में पाइप करने का एकमात्र तरीका है> , कभी-कभी मेरे पास कुछ एमबी की फाइलें होती हैं, इसलिए 200 लाइनों को वास्तव में मौजूदा एक्सई के साथ कुछ करना पड़ता है।

मैं केवल कुछ कामकाज का प्रयास करने का सुझाव दे सकता हूं, उदाहरण के लिए आप टीई 32 का प्रयास कर सकते हैं, यह एक छोटा फ्रीवेयर है जो सभी डॉस स्क्रीन आउटपुट को फ़ाइल में कैप्चर करेगा। तो आप स्क्रीन पर आउटपुट देखेंगे और आपके पास फ़ाइल में भी होगा।

आप इसके बारे में अधिक पढ़ सकते हैं: here दुर्भाग्य पृष्ठ पर उल्लिखित लिंक काम नहीं कर रहे हैं, लेकिन मैं इसके बारे में एक काम कर प्रतिलिपि प्राप्त करने में सक्षम था: here

मैं सच में आशा है कि यह मदद से आप समस्या को दूर ।

एमिल

+0

समस्या बहुत मुश्किल थी। मेरा कार्यक्रम एक बीमार लेकिन प्रतीत होता है कि अच्छी तरह से अच्छा तरीका है। कंसोल को रीडायरेक्ट करने के साथ कुछ भी गलत नहीं है (विन 7 64 बिट)। लेकिन मुझे यह जवाब बहुत पसंद आया क्योंकि यह इस तरह की समस्याओं को डीबग करने का तरीका देता है। – Notinlist

+1

धन्यवाद। मैंने एमएस-डॉस 5.0 और विंडोज 3.0 के साथ कंप्यूटर का उपयोग करना शुरू किया जब मैं लगभग 8-10 था, और किसी भी तरह डॉस और उन सभी छोटे कामकाजों की सीमाएं (जैसे 640 केबी रैम) अभी भी पसंदीदा विषय हो सकती हैं, इसका अपना जादू था और मुझे अभी भी लगता है डॉस के पास कुछ दिलचस्प अनुभव है कि आप कभी भी LINUX में नहीं मिलेंगे, न ही कोई फैंसी विंडोज़। –

1

आपकी समस्या के लिए एक वैकल्पिक समाधान एक सी # प्रोग्राम है जो उत्पादन कब्जा और एक फ़ाइल को भेज देता है निर्माण हो सकता है।

using System; 
using System.Collections.Generic; 
using System.Diagnostics; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace CaptureCMDOutput 
{ 
    class Program 
    { 
     static string _Filename = @"sc.exe"; 
     static string _Arguments = @"query"; 
     static string _outputfile = @"c:\debug.txt"; 

     static void Main(string[] args) 
     { 
      var processStartInfo = new ProcessStartInfo 
      { 
       FileName = _Filename, // Exe file to run 
       Arguments = _Arguments, // Arguments to exe file 
       RedirectStandardOutput = true, 
       UseShellExecute = false 
      }; 

      var process = Process.Start(processStartInfo); 
      process.OutputDataReceived += process_OutputDataReceived; 
      process.BeginOutputReadLine(); 
      process.WaitForExit(); 
      process.CancelOutputRead(); 

      Console.ReadKey(); 
     } 

     static void process_OutputDataReceived(object sender, DataReceivedEventArgs e) 
     { 
      Console.WriteLine(e.Data); 

      using (StreamWriter writer = new StreamWriter(_outputfile, true)) 
      { 
       writer.WriteLine(e.Data); 
      } 
     } 


    } 
} 
संबंधित मुद्दे