kuhnikuehnast
Goto Top

Batch- Gleichzeitige Ausgabe eines echos und speichern in Datei

Ich möchte mittels Batch echos zum einen im Fenster anzeigen lassen, zum anderen gleichzeitig als Logfile in einer .txt speichern

Hi!
So weit bin ich bis jetzt:

echo Datum gespeichert > %CD%/log/[%date%]- Logfile Server.txt

Allerdings bekomm ich das nie in der "Batchbox" angezeigt. Es wird immer nur in die Logfile Server.txt geschrieben.
Ich könnte jetzt natürlich alles doppelt schreiben:
echo %time% Datum gespeichert >> "%CD%/log/[%date%]- Logfile Server.txt"  
echo Datum gespeichert



, aber geht das auch anders? Schließlich vergeht ja eine gewisse Zeit bis der erste Befehl abgearbeitet ist und dann ist die Zeit ja nicht mehr synchron...

lg Kuhni

Content-Key: 133589

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

Printed on: April 19, 2024 at 10:04 o'clock

Member: bastla
bastla Jan 15, 2010, updated at Oct 18, 2012 at 16:40:52 (UTC)
Goto Top
Hallo kuhnikuehnast!

Halte den Timestamp einfach in einer Variablen fest:
set "Zeit=%time%"  
echo %Zeit% Datum gespeichert>>"log/[%date%]- Logfile Server.txt"  
echo %Zeit% Datum gespeichert
Ganz nebenbei: Wozu "%CD%" in der Pfadangabe dienen sollte, ist mir nicht klar ...

Ansonsten zum Thema: Batch - mit und ohne tee - Konsoleausgaben zugleich in eine Datei leiten und auf dem Bildschirm ausgeben (findest Du auch ein Stück weiter unten auf dieser Seite hier face-wink)

Grüße
bastla
Member: miniversum
miniversum Jan 16, 2010 at 07:57:35 (UTC)
Goto Top
Wenn es nur drum geht das die Zeit syncron ist gehts auch so:
echo %time% Datum gespeichert & echo %time% Datum gespeichert >> "%CD%/log/[%date%]- Logfile Server.txt"
Wenn das immer in einer Zeile steht wird die Zeitvariable nur einmal aufgelöst.
Member: kuhnikuehnast
kuhnikuehnast Jan 16, 2010 at 09:42:05 (UTC)
Goto Top
Hmm... Ich hab das ganze jetzt über eine CALL Prozedur versucht zu realisieren, da der log ja öfters verwendet wird und das ja so immer wieder geschrieben werden müsste:
@echo off
if not exist "%CD%/log/" mkdir "%CD%/log/"  

echo Hallo
echo.
call :ausgabe "Dies ist ein Test"  
echo Beendet

pause

	:ausgabe
	set Zeit=%time%
	echo %Zeit% %1 >> "%CD%/log/[%date%]- Logfile Server.txt"  
	echo %Zeit% %1
	goto :eof

pause

Allerdings habe ich jetzt folgends Problem:
Wenn ich als Parameter bei call einen Satz oder irgendwas mit Leerzeichen übergeben will, muss ich das ja irgendwie in Anführungszeichen setzen, da sonst ja nur das erste Wort bis zum ersten Leerzeichen übergeben wird. Dummerweise werden dann aber die Leerzeichen mit übergeben, was ich ja eigentlich nicht möchte. Gibt es da eine Möglichkeit, dass ich als Parameter eben einen ganzen Satz übergeben kann ohne Leerzeichen?

lg Kuhni
Member: kuhnikuehnast
kuhnikuehnast Jan 16, 2010 at 09:47:21 (UTC)
Goto Top
Juhuu! Problem selbst gelöst bekommen:

%1 entweder durch %~1 ersetzen --> Alles in Anführungszeichen, nur ohne diese

noch einfacher: %~ --> einfach alles wird übergeben, Anführungszeichen werden nicht mehr benötigt! face-smile

lg Kuhni
Member: bastla
bastla Jan 16, 2010 at 09:49:05 (UTC)
Goto Top
Hallo kuhnikuehnast!
Gibt es da eine Möglichkeit, dass ich als Parameter eben einen ganzen Satz übergeben kann ohne Leerzeichen?
Ich nehme an, Du meintest nicht "Leerzeichen", sondern "Anführungszeichen" ...
@echo off & setlocal
if not exist "%CD%/log/" mkdir "%CD%/log/"  

echo Hallo
echo.
call :ausgabe "Dies ist ein Test"  
echo Beendet
pause
goto :eof

	:ausgabe
	set Zeit=%time%
	echo %Zeit% %~1 >> "%CD%/log/[%date%]- Logfile Server.txt"  
	echo %Zeit% %~1
	goto :eof
[Edit] Etwas zu langsam ...
noch einfacher: %~ --> einfach alles wird übergeben, Anführungszeichen werden nicht mehr benötigt! face-smile
Um den gesamten, ohne Anführungszeichen übergebenen, Text auszugeben, ist (bei mir unter XP) die Schreibweise
echo %*
erforderlich
[/Edit]

Grüße
bastla

P.S.: Ich finde %CD% weiterhin überflüssig ...