Problem mit batch beim schreiben in .log- und txt-Dateien (UnixToolsForwindows bringt auch nichts), Versuch über zweite batch klappt auch nicht
Ich habe ja nichts gegen knobeln und aufgeben mag ich auch nicht, aber hier weiß ich einfach nicht mehr weiter.
Ich habe eine batch deren Inhalt als log und txt-Datei ausgegeben und weiterverarbeitet werden soll. Nun lässt es sich ja unter Windows leider nicht realisieren, dass durch die Verwendung der beiden Operatoren “>>“ das ganze gleichzeitig in der Konsole angezeigt und in die Dateien geschrieben wird.
Wenn ich nun aber einfach weiter unten in der batch folgendes einsetze
eml2.bat >> D:\cwRsync-Intern-%date%.txt
schreibt er mir zwar bis genau zu dieser Zeile die batsch in die beiden Dateien, führt das Skript aber nicht zu Ende und bleibt einfach stehen, so das die weiteren befehle nicht ausgeführt werden können. Ich kann mir gut vorstellen, dass sich hier die Katze die ganze Zeit in den Schwanz beißt…
Da ich (hier?) irgendwo gelesen habe, dass durch UnixToolsForwindows der Befehl “tee“ verwendet werden kann, hab ich das auch mal ausprobiert. Leider funktioniert das aber auch nicht. Er zeigt mit dann zum Beispiel in der betreffenden Zeile in der Konsole immer
15.08.2008 tee D:\cwRsync-Intern-%date%.txt
an. Ich habe da auch schon länger im Internet nachgeschaut, verschiedene Varianten und Ergänzungen ausprobiert, aber nichts gefunden was das Problem gelöst hat.
Schon mal danke fürs lesen
Gruß
. . .
Noch mal Hallo
Da ich das Problem so nicht lösen konnte, habe ich mir eine zweite batch geschrieben, die durch die erste aufgerufen wird.
Die zweite wird in der ersten durch
Call mitschreiben.bat
aufgerufen.
Die zweite enthält die Zeile
eml2.bat >> D:\eml2-%date%.txt
Das Problem ist nun, dass er mir in der Konsole alles bis zu der Zeile
Call mitschreiben.bat
anzeigt, dann aber die Fehlermeldung „Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird“ ausgibt.
Das absurde ist dabei, das die nach dem Call-Befehl geplante Ja/Nein-Abfrage und die daraus resultierenden Aufgaben durchgeführt und deren Ergebnisse ebenfalls in die txt-Datei ausgegeben werden können, obwohl er die ganze Zeit nur diese Fehlermeldung anzeigt.
Gruß
Ich habe eine batch deren Inhalt als log und txt-Datei ausgegeben und weiterverarbeitet werden soll. Nun lässt es sich ja unter Windows leider nicht realisieren, dass durch die Verwendung der beiden Operatoren “>>“ das ganze gleichzeitig in der Konsole angezeigt und in die Dateien geschrieben wird.
Wenn ich nun aber einfach weiter unten in der batch folgendes einsetze
eml2.bat >> D:\cwRsync-Intern-%date%.txt
schreibt er mir zwar bis genau zu dieser Zeile die batsch in die beiden Dateien, führt das Skript aber nicht zu Ende und bleibt einfach stehen, so das die weiteren befehle nicht ausgeführt werden können. Ich kann mir gut vorstellen, dass sich hier die Katze die ganze Zeit in den Schwanz beißt…
Da ich (hier?) irgendwo gelesen habe, dass durch UnixToolsForwindows der Befehl “tee“ verwendet werden kann, hab ich das auch mal ausprobiert. Leider funktioniert das aber auch nicht. Er zeigt mit dann zum Beispiel in der betreffenden Zeile in der Konsole immer
15.08.2008 tee D:\cwRsync-Intern-%date%.txt
an. Ich habe da auch schon länger im Internet nachgeschaut, verschiedene Varianten und Ergänzungen ausprobiert, aber nichts gefunden was das Problem gelöst hat.
Schon mal danke fürs lesen
Gruß
. . .
Noch mal Hallo
Da ich das Problem so nicht lösen konnte, habe ich mir eine zweite batch geschrieben, die durch die erste aufgerufen wird.
Die zweite wird in der ersten durch
Call mitschreiben.bat
aufgerufen.
Die zweite enthält die Zeile
eml2.bat >> D:\eml2-%date%.txt
Das Problem ist nun, dass er mir in der Konsole alles bis zu der Zeile
Call mitschreiben.bat
anzeigt, dann aber die Fehlermeldung „Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird“ ausgibt.
Das absurde ist dabei, das die nach dem Call-Befehl geplante Ja/Nein-Abfrage und die daraus resultierenden Aufgaben durchgeführt und deren Ergebnisse ebenfalls in die txt-Datei ausgegeben werden können, obwohl er die ganze Zeit nur diese Fehlermeldung anzeigt.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 94490
Url: https://administrator.de/contentid/94490
Ausgedruckt am: 22.11.2024 um 05:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo bugmenot,
definiere in deinem Windowsbatch die Ausgabedatei als Variable
Jede Zeile die nun in diese Textdatei geschrieben werden soll
sollte erstmal Ausgabe auf Console und in die Txt-Datei schreiben.
Bis hierhin soweit einfach zu realisieren. Jetzt der ungetestete Ansatz:
rufe dein Skript (z.B. batch.cmd) auf der Kommandozeile folgendermaßen auf
Das heisst nun müsste alles was dein Skript macht in die Textdatei geschrieben werden und die Ausgabe deines Skriptes auf der Kommandozeile alles in die Logdatei (
Habe jetzt kein tee.exe zum testen hier, aber ein Versuch ist es Wert.
Gruß AndreasA
definiere in deinem Windowsbatch die Ausgabedatei als Variable
SET AUSGABETXT=D:\cwRsync-Intern-%date%.txt
Jede Zeile die nun in diese Textdatei geschrieben werden soll
befehl | tee -a %ausgabetxt%
sollte erstmal Ausgabe auf Console und in die Txt-Datei schreiben.
Bis hierhin soweit einfach zu realisieren. Jetzt der ungetestete Ansatz:
rufe dein Skript (z.B. batch.cmd) auf der Kommandozeile folgendermaßen auf
batch.cmd | tee -a batch.log
Das heisst nun müsste alles was dein Skript macht in die Textdatei geschrieben werden und die Ausgabe deines Skriptes auf der Kommandozeile alles in die Logdatei (
batch.log
) schreiben.Habe jetzt kein tee.exe zum testen hier, aber ein Versuch ist es Wert.
Gruß AndreasA
Hallo nochmal,
kurze Anmerkung hast du die Datei
D:\cwRsync-Intern-%date%.txt vorher schon initialisiert? D.h. existiert die Datei für z.B. heute
D:\cwRsync-Intern-16.08.2008.txt schon bevor du sie mit der Umleitung ansprichst? Wenn nein, ist klar warum er an der Stelle abbricht. Er würde bei jeder Zeile versuchen sie neu zu erstellen. Deshalb ja mein Vorschlag diese Datei als Variable zu definieren und sie vor irgendeiner Umleitung einmal zu initialisieren.
Versuchs mal
kurze Anmerkung hast du die Datei
D:\cwRsync-Intern-%date%.txt vorher schon initialisiert? D.h. existiert die Datei für z.B. heute
D:\cwRsync-Intern-16.08.2008.txt schon bevor du sie mit der Umleitung ansprichst? Wenn nein, ist klar warum er an der Stelle abbricht. Er würde bei jeder Zeile versuchen sie neu zu erstellen. Deshalb ja mein Vorschlag diese Datei als Variable zu definieren und sie vor irgendeiner Umleitung einmal zu initialisieren.
Versuchs mal
Hast du die tee.exe im Suchpfad (Variable %PATH%) enthalten? Wenn nein dann musst du in deinem Skript den Pfad zur tee.exe mit angeben.
ich habe grade mal die aktuellen Unixtools geladen und mit der tee.exe funktioniert das, was du vorhast problemlos.
Was die Fehlermeldung angeht: Du darfst natürlich nicht das Skript und den Befehl im Skript an die gleiche Logdatei umleiten. Dann kommt genau von dir benannte Fehlermeldung.
Also zusammengefasst sollte alles so funktionieren:
befehl | "Pfad zu tee.exe\tee.exe" -a %ausgabedatei%
ich habe grade mal die aktuellen Unixtools geladen und mit der tee.exe funktioniert das, was du vorhast problemlos.
Was die Fehlermeldung angeht: Du darfst natürlich nicht das Skript und den Befehl im Skript an die gleiche Logdatei umleiten. Dann kommt genau von dir benannte Fehlermeldung.
Also zusammengefasst sollte alles so funktionieren:
- Dein Skript (sagen wir mal hauptskript.cmd) schreibt alle gewünschten Ausgaben neben der Console noch in eine Logdatei (namens %logdat%)
.... REM hauptscript.cmd .....
SET LOGDAT=D:\cwRsync-Intern-%date%.log
SET UNIXTOOLS="Pfad zur TEE.exe"
...
befehl1 | %unixtools%\tee -a %logdat%
befehl x | %unixtools%\tee -a %logdat%
... u.s.w
SET LOGDAT=D:\cwRsync-Intern-%date%.log
SET UNIXTOOLS="Pfad zur TEE.exe"
...
befehl1 | %unixtools%\tee -a %logdat%
befehl x | %unixtools%\tee -a %logdat%
... u.s.w
- du rufst dein Hauptskript mit nem Hilfsskript (helpwrite.cmd) oder direkt auf der Console mit Umleitung in eine Textdatei (%txtout%) auf
.... REM helpwrite.cmd ......
SET TXTOUT=D:\cwRsync-Intern-%date%.txt
SET UNIXTOOLS="Pfad zur TEE.exe"
hauptscript.cmd | %unixtools%\tee -a %txtout%
SET TXTOUT=D:\cwRsync-Intern-%date%.txt
SET UNIXTOOLS="Pfad zur TEE.exe"
hauptscript.cmd | %unixtools%\tee -a %txtout%
- somit hast du nun 2 Dateien
- eine D:\cwRsync-Intern-%date%.log in dem die Ausgaben aller Befehle stehen, die du in deinem Hauptskript neben der Console umgeleitet hast
- und eine D:\cwRsync-Intern-%date%.txt, in der alles steht, was dein Hauptskript auf der Console ausgibt
- und kannst alles auf der Console nebenbei lesen