Batch Ausgabe in Datei schreiben

gmt

Cadet 1st Year
Registriert
Juli 2016
Beiträge
15
Hi, ich möchte die Ausgabe der Batchdatei "Messung.bat" in die Datei Messwerte.txt schreiben.

Mein Code:

Code:
Messung.bat >> Messwerte.txt

oder

Code:
Messung.bat > Messwerte.txt

oder

Code:
Messung >> Messwerte.txt

oder

Code:
Messung > Messwerte.txt

startet zwar das programm danach passiert aber nichts mehr. Das Fenster bleibt offen und es tut sich einfach nichts.
 
Funktioniert deine Messung.bat wenn du die Umleitung in eine Datei weglässt?
 
Bagbag schrieb:
Funktioniert deine Messung.bat wenn du die Umleitung in eine Datei weglässt?

die messung funktioniert noch nicht, das hat aber wohl andere gründe. ein paar benutzerabfragen sollten aber z.m. noch erscheinen und aufgezeichnet werden und das funktioniet auch (siehe kompletten code).

Code:
@Echo off
@echo Messwerterfassung
:Ja
echo Bitte Benutzernamen eingeben
set /p Benutzer=
echo Bitte Teilenummer eingeben
set /p Teil=
echo Bitte Messdauer in Sekunden eingeben
set /p Messdauer=
echo Bitte Art der Messung eingeben (T2-A, etc..)
set /p Messung=
Messung > messung.txt
SET Port=3
mode com3:19200,n,8,1
for /l %%i in (1,1,%messung%) do (
type com3>messung.txt
timeout /T 1
) %%i

ECHO Moechten Sie noch eine Messung durchfuehren ? (j / n)
SET /p wahl=
if '%wahl%' == 'n' goto Nein
if '%wahl%' == 'j' goto Ja
Goto Ende

:Nein
Messung abgeschlossen

goto Ende

:Ende
pause
Ergänzung ()

Thor9 schrieb:
Hi,

aus dem Netz oder wenn Du den Text anhängen willst.

Erklärung dazu. https://de.wikibooks.org/wiki/Batch-Programmierung:_Batch-Operatoren#.3E

genau das gleiche. die datei log.txt wird allerdings erstellt
 
Zuletzt bearbeitet:
Wenn du die Ausgabe umleitest, erscheint da auch nix. ;)
Versuchs mal etwa so:

Code:
for /f "delims=" %%i in ('messung') do echo %%i & echo %%i>> "Messung.txt"
 
Da deine Datei "Messung.bat" heißt, rufst du das Script in Zeile 12 auf, wodurch du eine Endlosschleife hast.
 
also ich weiss nicht ob ich es richtig erklärt habe:
zeile 1-11 soll mit in die datei geschrieben werden
der loop: kann, muss aber nicht angezeigt werden sollte ab auch mit in die datei geschrieben werden.
wird in zeile 20. "ja" gewählt wird das auch alles mit in die datei geschrieben bis in zeile 20 "nein" gewählt wird.

wie mach ich das?
 
Anstatt einfach den Output zu loggen, schreibst du einfach die einzelnen Variablen in die Datei.
 
das geht für alle benutzereingaben. aber geht das auch für die messwerte des messgeräts? und wenn ja wie?
 
wow funktioniert tatsaechlich....

habe schon zich andere befehle probiert die alle nicht gingen (daher die nachfrage)
Ergänzung ()

Bagbag schrieb:
Ach komm, ein klein wenig darfst du auch selbst googlen:

jetzt aber noch eine frage dazu: das macht der ja jetzt endlos... ich hätte aber gerne das er es nach %messdauer% abbricht.

hier nochmal der aktuelle code
Code:
@Echo off
@echo Messwerterfassung
:Ja
echo Messung > messung.txt
echo Bitte Benutzernamen eingeben
set /p Benutzer=
echo Benutzer: %Benutzer% >> messung.txt
echo Bitte Teilenummer eingeben
set /p Teil=
echo Teil: %Teil% >> messung.txt
echo Bitte Messdauer in Sekunden eingeben
set /p Messdauer=
echo Messdauer: %Messdauer% >> messung.txt
echo Bitte Art der Messung eingeben (T2-A, etc..)
set /p Messung=
echo Messungsart: %Messung% >> messung.txt
mode com3:19200,n,8,1

type com3: >> messung.txt


ECHO Moechten Sie noch eine Messung durchfuehren ? (j / n)
SET /p wahl=
if '%wahl%' == 'n' goto Nein
if '%wahl%' == 'j' goto Ja
Goto Ende

:Nein
Messung abgeschlossen
echo Ende der Messung >> messung.txt
goto Ende

:Ende
pause
 
Nach 15 Minuten (eher mehr) googlen... Das ganze ist gar nicht mal so einfach.

Wenn geloggt wird, kann nichts anderes ausgeführt werden. Ein timeout command um ein anderen command nach einer bestimmten zeit zu beenden gibt es nicht, also bleibt nur noch die Möglichkeit, ein "subcmd" zu starten
welcher loggt, dann wartest du im Hauptscript die gewünschte Zeit und killst den anderen cmd Prozess. Dazu musst du aber wissen wie die PID aller davor gestarteten cmd Prozessen ist, um am Ende auch das richtige killen zu könne.

Die Implementierung überlasse ich dir :)


Viel einfacher wäre das ganze bspw. in C# zu erledigen.
 
Zuletzt bearbeitet:
kann ich nicht etwas ähnliches wie type jede sekunde ausführen und nach 60 sekunden stoppen? (z.b. wie mit dem loop der ganz oben noch im code ist, aber nicht funktioniert)

Code:
for /l %%i in (1,1,%messung%) do (
type com3>messung.txt
timeout /T 1
) %%i
 
type ließt ja aber nicht nur eine Sekunde, sondern bis zum Ende - was in deinem Fall für immer sein wird. Die Loop wird hier also gar nicht ausgeführt, bzw direkt beim ersten Durchlauf durch das type blockiert.
 
Bagbag schrieb:
type ließt ja aber nicht nur eine Sekunde, sondern bis zum Ende - was in deinem Fall für immer sein wird. Die Loop wird hier also gar nicht ausgeführt, bzw direkt beim ersten Durchlauf durch das type blockiert.

deswegen suche ich nach einer alternative zu "type" ich habe im internet auch gesehen das manche "copy" benutzen, folgender code funktioniert nur leider nicht.

Code:
for /L %%N IN (1, 1, %Messdauer%) DO (
COPY COM3 messung.csv
timeout /T 1)
 
Zuletzt bearbeitet:
Visual Studio.png

Ich hoffe du machst das nicht der Übung wegen, da mir gerade etwas langweilig ist und ich daher beschlossen habe, dir das ganze in C# zu machen.


Auch mit copy scheint das nicht zu funktionieren, zumindest finde ich durch "copy /?" nichts passendes.
 
Bagbag schrieb:

Ich hoffe du machst das nicht der Übung wegen, da mir gerade etwas langweilig ist und ich daher beschlossen habe, dir das ganze in C# zu machen.


Auch mit copy scheint das nicht zu funktionieren, zumindest finde ich durch "copy /?" nichts passendes.

nein nein ich mach das hier schon ernsthaft die firma die das messgerät herstellt liefert leider keinerlei support und hyper terminal kann zwar mit dem messgerät kommunizieren aber auch nur endlos und nicht für 60 sekunden oder so.

ich hab zwar mal C in der uni gelernt aber nicht in verbindung mit hardware. daher konnte ich das mit C leider selber nicht lösen
 
Zuletzt bearbeitet:
Zurück
Oben