kamenz
Goto Top

Batchdatei - Logschreiben aber trotzdem Textausgabe in der Konsole

Hallo!
Mein Problem ist das ich wenn ich ne Batch habe und eine Log definiert habe und Zeilen mit
>> %LOG%
in die Log schreibe keine Ausgabe mehr am aktuellen Konsolefesnter erfolgt. Kennt da jemand ne Lösung?

Content-Key: 17196

Url: https://administrator.de/contentid/17196

Printed on: April 16, 2024 at 15:04 o'clock

Mitglied: 16640
16640 Oct 05, 2005 at 07:56:47 (UTC)
Goto Top
M.W. geht das mit dem normalen Kommandointerpreter von Windows nicht. Iirc bietet 4NT von JP-Soft diese Möglichkeit.

Aber mal grundsätzlich: wozu eigentlich? Entweder sitz ich davor und will gucken, was passiert, dann brauch' ich die Umleitung nicht. Wenn ich später alles in Ruhe nachlesen will, dann stört mich auch der dunkle Monitor nicht face-wink

hand/dba
Member: Biber
Biber Oct 05, 2005 at 18:51:09 (UTC)
Goto Top
Moin Kamenz,

ich finde dba's Einwand berechtigt, kenne aber auch Dein Problem.
Ich habe das in einigen Batchen (z.B. meinen StartUp-Scripten), in denen ich ein paar normale Statusmeldungen auf dem Bildschirm anzeigen lasse und aus den Augenwinkeln mitverfolge, aber zusätzlich Fehlermeldungen sowohl auf dem Monitor haben will wie auch in einer Log-Datei. Die normalen Alles-Prima-Meldungen will ich ja nicht mitloggen... wozu auch.

Billig-Strategie für diese Mimik: wenn es einen Fehler gegeben hat, einfach den selben Befehl noch einmal ausführen lassen. Und diesmal die Ausgabe umleiten in die Logdatei
Beispiel:
...
net use x: \\server\freigabe 
if Errorlevel 1 net use x: \\server\freigabe >>%logfile%
...
Oder, was bei mir auch vorkommt: bestimmte Befehle einfach doppelt ausführen.
Habe sogar ein echtes Beispiel aus meinen Startscriptchen gefunden:
...
net use |find "OK"  
echo %time:~0,5% NetStatus final >>%logfile%
net use |find "OK" >>%logfile%  
...
Das heißt, die Anzeige, welche Netzlaufwerke nach dem Startup da sind, will ich erst auf dem Bildschirm haben und danach nochmal mit Uhrzeit im Logfile.
Dritte Variante:
Befehl nur einmal ausführen, aber jegliche Meldung unterdrücken und selbst eine (oder mehrere) schreiben
...
net use x: \\server\freigabe >nul 2>nul

if Errorlevel 1 (
  echo Laufwerk X: konnte nicht verbunden werden!
  echo Laufwerk X: konnte nicht verbunden werden! >>%logfile%
  goto nextlw
)
echo Laufwerk X: verbunden....

:nextlw
net use y: \\server2\freigabeB >nul 2>nul
...
Eleganter bekommst Du Deine Anforderung mit kleinen Utilities hin, die von richtigen Betriebssystemen nach Windows portiert wurden.

Die nennen sich dann Tee.exe oder (mTee.exe, wTee.exe) und machen dasselbe wie tee unter Unix (schreiben gleichzeitig auf zwei Kanälen, einmal auf Console, einmal in Datei).
Findest Du beim Gogglen.

Vorteil: Du kannst alle Meldungen dann sowohl..als auch.. schreiben und der eigentliche Befehl wird nur einmal ausgeführt.

Nachteil: Dein Batch läuft eben auch nur noch dort, wo das Hilfsutility gefunden wird. Auf Deinem Rechner sicherlich, aber eben nicht mehr auf jedem beliebigen Rechner.

Deshalb empfehle ich Dir lieber das Doppelt-Schreiben, auch wenn es stümperhaft aussieht.

HTH Biber
Member: Kamenz
Kamenz Oct 06, 2005 at 07:13:15 (UTC)
Goto Top
Danke erstmal!
Hat sich soweit erledigt.
Die Ausgabe sollte nur nocheinmal für Debugging in der Konsole stattfinden.
Aber da das File jetz eh läuft ist es auch egal. face-smile
Also wer den Skript braucht um Oracle Archive zu sichern kann sich melden ;).
Member: NeonZero
NeonZero Sep 13, 2008 at 07:23:09 (UTC)
Goto Top
Viele Wege führen zum Ziel. Bibers und meinen Weg habe ich in dieser Anleitung zusammengetragen.

Bye, nz