2012-07-20 9 views
5

Ho uno strumento da riga di comando che tipicamente scarica circa 200+ righe di output. Sto cercando il testo che appare alla fine di questo output. Quando ho reindirizzare l'output in un file:Il comando DOS reindirizza al file tronca l'output

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

... solo i primi 100 o giù di linee di produzione si presenta in questo file. Allo stesso modo, se inserisco l'output in qualcosa come "findstr", il programma ricevente non è in grado di trovare o utilizzare alcun testo dopo circa la centesima riga.

Le impostazioni della dimensione del buffer dello schermo per la shell sembrano non avere alcun effetto sul numero di righe che possono essere catturate.

Qualche idea cosa sta succedendo qui? Per quello che vale, il comando in questione è iscmdbld.exe da InstallShield 2012.

Questo problema non si verifica con altri comandi che ho provato (come 'dir').

L'output completo del programma può essere visualizzato solo quando si esegue il comando all'interno di una finestra di cmd.

+0

provare il reindirizzamento alla partenza, solo in caso il comando sta trattando come parametro - '> results.txt 2> & 1 somecommand' – SeanC

+0

Prova aggiungendo l'output: C: \> somecommand >> results.txt 2> & 1 – DogLimbo

+0

Ho lo stesso programma con il mio progetto Visual C++. L'output del mio programma viene troncato quando viene reindirizzato a un file.Programma – Notinlist

risposta

0

Un'altra virata è aggiungere ('>>') invece di iniziare fresco ('>'). Tuttavia, non riesco a pensare come generare anche quello che stai vedendo senza saperne di più sul tuo problema.

+0

Impossibile produrre un piccolo programma di riproduzione. L'effetto originale è a posto nella situazione originale. Aggiungere ulteriori informazioni al mio caso nel commento della domanda. – Notinlist

1

Nel caso in cui si sta scrivendo un altro flusso, provate questo:

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

L'altra possibilità è che lo strumento è con schermo direct-scrive per una parte della produzione - in giorni MSDOS lettura dello schermo ci sono stati Programmi TSR che possono aiutare.

2

Beh, purtroppo non ho installato InstallShield quindi sarà abbastanza difficile per me eseguire alcuni test, ma ho cam attraverso programmi che non agiscono come dovrebbero fare quando si tratta di gestire input e output. In un caso normale ">" dovrebbe avere alcun limite, lo sto usando molto su un server Windows che esegue ghostscript e altri vecchi programmi DOS in background e l'unico modo per reindirizzare l'output su un file è usare> , a volte ho file di parecchi Mb, quindi le 200 linee devono davvero fare qualcosa con l'exe corrente.

Posso solo suggerire di provare qualche soluzione, ad esempio si può provare tee32, è un piccolo freeware che catturerà tutto l'output dello schermo dos in un file. Quindi vedrai l'output sullo schermo e lo avrai anche nel file.

Si può leggere di più su di esso: here purtroppo i link citati nella pagina non funzionano, ma sono stato in grado di trovare una copia di lavoro di esso: here

Spero davvero che questo vi aiuterà a superare il problema .

Emil

+0

Il problema era molto complicato. Il mio programma terminò in modo malato ma apparentemente buono. Non c'è niente di sbagliato (Win 7 64 bit) con il reindirizzamento della console. Ma questa risposta mi è piaciuta moltissimo dato che dà il via a problemi di debug come questo. – Notinlist

+1

Grazie. Ho iniziato a usare computer con MS-DOS 5.0 e Windows 3.0 quando avevo circa 8 - 10, e in qualche modo DOS e tutti i piccoli workaround queste limitazioni (come 640kb RAM) sono ancora soggetti preferiti, ha la sua magia e io continuo a pensare DOS ha un aspetto interessante in cui non entrerai mai in LINUX né in Windows. –

1

Una soluzione alternativa al problema potrebbe essere la costruzione di un programma C# che cattura l'uscita e lo invia a un file.

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); 
      } 
     } 


    } 
} 
Problemi correlati