Batch- Ausgabe in .txt fehlerhaft
Hallo!
Nachdem ich nun schon einige Zeit stiller Mitleser bin und sehr von dem geballten Sachverstand hier profitiert habe, eine Frage, bei der ich nicht mehr weiterkomme und zu der ich hoffe, dass Ihr Tipps habt.
Ich habe ein Makro in VBA geschrieben, das Werte aus diversen Excel-Files ausliest und eine .bat aufruft, der diese Werte übergeben werden und die damit Berechnungen (u.a. Hashwerte) durchführt. Der .bat Aufruf erfolgt mehrfach über eine Schleife. Mit nachfolgendem Code überwache ich, dass die Schleife in VBA, die den mehrfachen Aufruf durchführt, erst weiterläuft, wenn die .bat abgeschlossen ist.
Die Ergebnisse der .bat werden in eine .txt geschrieben. Und hier kommt das Problem: Die Ausgabe in der .txt erfolgt immer wieder fehlerhaft und bei jedem Durchlauf anders fehlerhaft. Es wirkt also, als ob die .bat "stolpern" würde, und die ein oder andere Zeile nicht in die .txt schreiben würde obwohl das echo aufgerufen wird. Auf meinem PC funktioniert es o.W., rufe ich das Makro jedoch über einen remote-Zugriff (und eine langsamere Verbindung) auf, kommt es immer wieder zu diesen Problemen mit der Ausgabe.
Der Code für die Ausgabe im .txt sieht so aus:
Dieser Kopf wird beim ersten Aufruf geschrieben:
Dann wird bei den weiteren Aufrufen immer eine Ausgabe für die jeweiligen Berechnungen (nach dem gleichen Muster, Zeile für Zeile wird in die .txt geschrieben) angefügt.
Lasse ich das Programm mehrfach laufen, ist die Ausgabe manchmal korrekt und manchmal falsch, immer wieder unterschiedlich (also fehlt z.B. einmal die Zeile 2 "lieber Herr xxx", dann fehlt wieder die Zeile "Datum, Unterschrift" etc.).
Ich nehme an, nachdem der Fehler nur in schlechter Verbindung auftaucht, dass es schlichtweg ein Verbindungsproblem ist. Gibt es eine Möglichkeit, den Text vllt. nur mit einem echo in die Ausgabedatei zu schreiben und anderweitig zu formatieren, dass Zeilenumbrüche etc. angezeigt werden statt Zeile für Zeile vorzugehen, wie ich das bisher mache?
Oder aber bin ich auf dem Holzweg und der Fehler steckt woanders?
Ich bin wirklich für jede Hilfestellung dankbar, weil ich langsam am Ende mit meinem Latein bin und mich wundere, warum ein Programm auf dem einen Rechner einwandfrei funktioniert und auf dem anderen nicht?
Ich danke Euch bereits ganz herzlich im Voraus!
Viele liebe Grüße
Florence
Nachdem ich nun schon einige Zeit stiller Mitleser bin und sehr von dem geballten Sachverstand hier profitiert habe, eine Frage, bei der ich nicht mehr weiterkomme und zu der ich hoffe, dass Ihr Tipps habt.
Ich habe ein Makro in VBA geschrieben, das Werte aus diversen Excel-Files ausliest und eine .bat aufruft, der diese Werte übergeben werden und die damit Berechnungen (u.a. Hashwerte) durchführt. Der .bat Aufruf erfolgt mehrfach über eine Schleife. Mit nachfolgendem Code überwache ich, dass die Schleife in VBA, die den mehrfachen Aufruf durchführt, erst weiterläuft, wenn die .bat abgeschlossen ist.
Sub Timeout()
Dim wsh As Object
Dim waitOnReturn As Boolean
Dim windowStyle As Integer
Dim errorCode As Integer
Set wsh = VBA.CreateObject("WScript.Shell")
waitOnReturn = True
windowStyle = 1
errorCode = wsh.Run("CMD /c call "".BATDATEI""", windowStyle, waitOnReturn)
If errorCode = 0 Then
MsgBox "Done! No error to report."
Else
MsgBox "Program exited with error code " & errorCode & "."
End If
End Sub
Die Ergebnisse der .bat werden in eine .txt geschrieben. Und hier kommt das Problem: Die Ausgabe in der .txt erfolgt immer wieder fehlerhaft und bei jedem Durchlauf anders fehlerhaft. Es wirkt also, als ob die .bat "stolpern" würde, und die ein oder andere Zeile nicht in die .txt schreiben würde obwohl das echo aufgerufen wird. Auf meinem PC funktioniert es o.W., rufe ich das Makro jedoch über einen remote-Zugriff (und eine langsamere Verbindung) auf, kommt es immer wieder zu diesen Problemen mit der Ausgabe.
Der Code für die Ausgabe im .txt sieht so aus:
Dieser Kopf wird beim ersten Aufruf geschrieben:
echo Liebe Kolleginnen und Kollegen, > "%ausgabedatei%"
echo lieber Herr xxx, >> "%ausgabedatei%"
echo. >> "%ausgabedatei%"
echo text text text . >> "%ausgabedatei%"
echo text text text. >> "%ausgabedatei%"
echo. >> "%ausgabedatei%"
echo text text text. >> "%ausgabedatei%"
echo text text text. >> "%ausgabedatei%"
echo. >> "%ausgabedatei%"
echo Mit freundlichen Gruessen >> "%ausgabedatei%"
echo. >> "%ausgabedatei%"
echo Datum, Unterschrift >> "%ausgabedatei%"
echo. >> "%ausgabedatei%"
Dann wird bei den weiteren Aufrufen immer eine Ausgabe für die jeweiligen Berechnungen (nach dem gleichen Muster, Zeile für Zeile wird in die .txt geschrieben) angefügt.
Lasse ich das Programm mehrfach laufen, ist die Ausgabe manchmal korrekt und manchmal falsch, immer wieder unterschiedlich (also fehlt z.B. einmal die Zeile 2 "lieber Herr xxx", dann fehlt wieder die Zeile "Datum, Unterschrift" etc.).
Ich nehme an, nachdem der Fehler nur in schlechter Verbindung auftaucht, dass es schlichtweg ein Verbindungsproblem ist. Gibt es eine Möglichkeit, den Text vllt. nur mit einem echo in die Ausgabedatei zu schreiben und anderweitig zu formatieren, dass Zeilenumbrüche etc. angezeigt werden statt Zeile für Zeile vorzugehen, wie ich das bisher mache?
Oder aber bin ich auf dem Holzweg und der Fehler steckt woanders?
Ich bin wirklich für jede Hilfestellung dankbar, weil ich langsam am Ende mit meinem Latein bin und mich wundere, warum ein Programm auf dem einen Rechner einwandfrei funktioniert und auf dem anderen nicht?
Ich danke Euch bereits ganz herzlich im Voraus!
Viele liebe Grüße
Florence
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 585860
Url: https://administrator.de/forum/batch-ausgabe-in-txt-fehlerhaft-585860.html
Ausgedruckt am: 11.04.2025 um 00:04 Uhr
7 Kommentare
Neuester Kommentar
Hallo,

Gruß,
Peter
Zitat von @Florence:
Auf meinem PC funktioniert es o.W., rufe ich das Makro jedoch über einen remote-Zugriff (und eine langsamere Verbindung) auf, kommt es immer wieder zu diesen Problemen mit der Ausgabe.
W0 liegt denn diese TXT Datei deine %ausgabedatei% aus sicht vom RemoteClient Lokal, Server, NAS, VPN? Lass doch auf den RemoteClient schreiben, ist es dann besser?Auf meinem PC funktioniert es o.W., rufe ich das Makro jedoch über einen remote-Zugriff (und eine langsamere Verbindung) auf, kommt es immer wieder zu diesen Problemen mit der Ausgabe.
Oder aber bin ich auf dem Holzweg und der Fehler steckt woanders?
Da wir hier nur ein Bruchstück sehen ist es schwer zu sagen oder einfach nur geraten.Ich bin wirklich für jede Hilfestellung dankbar, weil ich langsam am Ende mit meinem Latein bin und mich wundere, warum ein Programm auf dem einen Rechner einwandfrei funktioniert und auf dem anderen nicht?
Meistens weil nicht jeder Rechner gleich ist. Gruß,
Peter
Hallo,
Versuche mal deinen Text, den du mit echo ausgibst, zuerst vollständig als Variable zu generieren und dann mit nur einer echo-Anweisung auszugeben. Dadurch hast du nur 1 Schreibzugriff und langsame Verbindungen sollten keine Probleme machen.
Gruß
eisbein
Auf meinem PC funktioniert es o.W., rufe ich das Makro jedoch über einen remote-Zugriff (und eine langsamere Verbindung) auf, kommt es immer wieder zu diesen Problemen mit der Ausgabe.
Versuche mal deinen Text, den du mit echo ausgibst, zuerst vollständig als Variable zu generieren und dann mit nur einer echo-Anweisung auszugeben. Dadurch hast du nur 1 Schreibzugriff und langsame Verbindungen sollten keine Probleme machen.
Gruß
eisbein
Hallo,
Genau das geht eben mit echo nicht ....
Powershell ist keine Alternative?
Ich habe hier einen Thread gefunden, hier klappt es bei der Display-Ausgabe. Vielleicht hilft dir der Ansatz:
Batch - Variable mit Zeilenumbruch
Edit: basiert aber wierder auf mehrfachen echos...
Gruß
eisbein
Genau so etwas schwebt mir vor, ich gestehe aber, dass ich an dem Problem Zeilenumbruch/Absätze scheitere. Dh. Wie bekomme ich es hin, dass ich nicht einen langen Text übergebe, sondern schön mit Absätzen? Ich bin da noch nicht so versiert mir den .bats, weiß nur, dass die Formatierungsmöglichkeiten sehr begrenzt sind und mit dem Einbauen von \n \r In den String bin ich nicht wirklich weitergekommen (wird einfach als Text ausgegeben).
Genau das geht eben mit echo nicht ....
Powershell ist keine Alternative?
Ich habe hier einen Thread gefunden, hier klappt es bei der Display-Ausgabe. Vielleicht hilft dir der Ansatz:
Batch - Variable mit Zeilenumbruch
Edit: basiert aber wierder auf mehrfachen echos...
Gruß
eisbein

So geht das auch
Damit wir nur einmalig ein Schreibvorgang vorgenommen.
Aber wie schon vorgeschlagen wurde, einfach alles in die Powershell tüten, dann ist auch certutil für Hash-Berechnung überflüssig, da alle NET Klassen dafür zur Verfügung stehen ...
>"%ausgabedatei%" (
echo Das
echo ist
echo ein
echo Test
)
Aber wie schon vorgeschlagen wurde, einfach alles in die Powershell tüten, dann ist auch certutil für Hash-Berechnung überflüssig, da alle NET Klassen dafür zur Verfügung stehen ...