Forum: PC-Programmierung [Windows-Batch] Ausgabe von Programm laufend in Textdatei schreiben


von Ich (Gast)


Lesenswert?

Hallo zusammen,

wie kann ich mit Windows-Batchdateien die Ausgabe eines Programms 
laufend in eine Textdatei schreiben, während die Haupt-Batch noch 
weiterläuft?
Mein erster Versuch war: start /min programm.exe >> logfile.csv
Dann wird aber das Ergebnis des Programms im neuen Fenster am Bildschirm 
angezeigt.
Mit einer neuen Batchdatei (log.bat), die ich per start /min log.bat 
aufrufe (in log.bat: programm.exe >> logfile.csv) wird zwar das Ergebnis 
des Programms in die Datei geschrieben, jedoch erst nachdem das Programm 
beendet ist.
Das Programm sollte aber dauerhaft laufen und gibt alle paar Sekunden 
Werte aus, die dann jeweils sofort an die Logdatei angehängt werden 
sollen.
Gibt es dafür in Batch irgendeine Möglichkeit?

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

tail --help eingeben
gibts zumindest bei w7


unter unix "man tail"

von JensM (Gast)


Lesenswert?

Hallo Ich,

die Umleitung in das Logfile müsste so funktionieren.
Die Datei wird dabei aber nicht sofort geschrieben, sondern das erfolgt 
erst wenn eine gewisse Datenmenge in der Pipe vorhanden ist.
Nach meinen Erfahrung spätestens nach 4kByte.

Gruss JensM

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wegstaben Verbuchsler schrieb:
> tail --help eingeben
> gibts zumindest bei w7

Ach? Wo denn?

von Klaus W. (mfgkw)


Lesenswert?

Wegstaben Verbuchsler schrieb:
> tail --help eingeben
> gibts zumindest bei w7

Dann habe ich kein Win7:
1
F:\kw>tail --help
2
'tail' is not recognized as an internal or external command,
3
operable program or batch file.

von Ich (Gast)


Lesenswert?

tail hab ich leider nicht unter Win XP.
Wie sollte ich das verwenden?

Wenn erst nach 4kByte gespeichert wird, bringt mir das nichts. Z.Zt. 
gibt es alle 900 Sekunden ca. 30 Byte aus, dann wäre das über ein Tag 
Verzögerung.

von troll (Gast)


Angehängte Dateien:

Lesenswert?

Hm...
1
prog | test_c "file.txt"
1
#include <stdlib.h>
2
#include <stdio.h>
3
4
int main (int argc, char **argv)
5
{
6
  int c;
7
  FILE *f=fopen(argv[0],"wb");
8
  if(f!=NULL)
9
  {
10
    while((c=getchar())!=EOF)
11
    {
12
      putc(c,f);
13
      fflush(f);
14
    }
15
    fclose(f);
16
  }
17
  return 0;
18
}

Nicht schön aber selten, kannst du das mal testen?

von Christian D. (burning_legend)


Lesenswert?

Vllt. hilft bei dem Problem auch die Windows Powershell, die bei Win7 
dabei ist, für XP heruntergeladen werden kann:

http://de.wikipedia.org/wiki/Windows_PowerShell

Meines Wissens kann man damit Programme aufrufen und deren Output 
auslesen und auch schreiben, allerdings finde ich die Fkt gerade nicht.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Ach? Wo denn?

bei mir ist es hier, ich weiß aber nicht wie es da hin gekommen ist ;-)

C:\Program Files\WinAVR\WinAVR-20100110\utils\bin

(ok, nix W7 spezifisches)

bei MS kann man sich was vergleichbares runter laden

http://www.windows-commandline.com/2010/08/tail-command-for-windows.html

von Ich (Gast)


Lesenswert?

> FILE *f=fopen(argv[0],"wb");
sollte wohl argv[1] heißen?
Ich werds versuchen.

Die PowerShell installieren ist zuviel Aufwand für so eine Kleinigkeit.

Zum tail-Befehl: Ich versteh immer noch nicht, wie ich den dann benutzen 
soll und was der genau macht.

von troll (Gast)


Lesenswert?

Ich schrieb:
>> FILE *f=fopen(argv[0],"wb");
> sollte wohl argv[1] heißen?
Argh, ja, natürlich.

von Ich (Gast)


Lesenswert?

Dein Programm erstellt die Datei sofort, aber schreibt nichts rein, auch 
nicht nach dem Beenden.

von troll (Gast)


Lesenswert?

Ich schrieb:
> Dein Programm erstellt die Datei sofort, aber schreibt nichts rein, auch
> nicht nach dem Beenden.

Hast du es richtig aufgerufen?
1
dein_programm | mein programm datei.txt
                ^^^^

von Ich (Gast)


Lesenswert?

M:\...>programm 9 | test_c logfile.csv

9 ist ein Parameter für mein Programm.

von troll (Gast)


Lesenswert?

Ich schrieb:
> M:\...>programm 9 | test_c logfile.csv
>
> 9 ist ein Parameter für mein Programm.

Hab gerade ausführlicher getestet, funktioniert tatsächlich nicht. 
Sorry, dann weiß ich auch nicht...

von Ich (Gast)


Lesenswert?

Danke trotzdem.
Ich habs inzwischen anders gelöst (das Programm läuft nicht dauerhaft, 
sondern wird von der Batchdatei in regelmäßigen Abständen aufgerufen).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.