evinben
Goto Top

Ausgabe in Datei ermöglichen aber zeitgleich in der Eingabeaufforderung weiterhin anzeigen.

Hallo,

gäbe es im Batch eine Lösung, wie die Ausgaben (irgendwelcher Befehle) weiterhin im CMD-Fenster für den Benutzer anzeigen aber diese dennoch zeitgleich in eine Datei schreiben?
Mit >nul an Ende eines Befehls werden ja alle seine Ausgaben in dem CMD-Fenster unterdrückt, und die Befehle dürfen ja wegen der Ausgabe in Datei nicht extra sich wiederhohlen und genau hier bin ich überfragt ;-(.

Vielen Dank für paar Tipps

Gruß
evinben

Content-ID: 189105

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

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

Pjordorf
Pjordorf 03.08.2012 um 21:30:37 Uhr
Goto Top
Hallo,

Zitat von @evinben:
gäbe es im Batch eine Lösung, wie die Ausgaben (irgendwelcher Befehle) weiterhin im CMD-Fenster für den Benutzer
anzeigen aber diese dennoch zeitgleich in eine Datei schreiben?
Ja.

Mit >nul an Ende eines Befehls werden ja alle seine Ausgaben in dem CMD-Fenster unterdrückt,
Nein. Die werden nicht unterdrückt sondern werden durch das > Zeichen umgeleitet. In deinem beispiel an das Gerät mit der internen Bezeichnung NUL. Dort werden die Daten dann schlichtweg einfach vernichtet.

Und mit ein paar Suchbegriffen und einer Suchmaschine deiner Wahl findest du dann ganz schnell zu Rob Van der Woude und seinem Batch Redirection welches dich dann zum UnixPorts und dort gezielt zum TEE führt.

Alternativ mittels Powershell kannst du auch das Tee-Object Cmdlet nutzen.

Es gibt sicherlich noch weitaus mehr möglichkeitenface-smile

Gruß,
Peter
60730
60730 03.08.2012 um 21:37:23 Uhr
Goto Top
Moin,

Zitat von @Pjordorf:
Es gibt sicherlich noch weitaus mehr möglichkeitenface-smile

  • Stückkunst, die Frage wird ja mindestens 1* pro Jahrhalb neu gestellt....
Darkprodukt
Darkprodukt 03.08.2012 um 22:09:27 Uhr
Goto Top
Hm, du willst ja nur die ausgabe doppelt.

z.b.
for /f [...] %%i in [...] do echo %%i>>Die_Datei.txt && echo %%i 

So würde ich das machen...

Bei anderen Befehlen, weiß ich icht genau wie das fungtioniert, aber du könntest z.b. den befehl auch doppelt ausführen.
Einmal für die Datei und einmal für die ausgabe. (ist aber nicht wirklich optimal)

Grüße
Darkprodukt
bastla
bastla 03.08.2012 um 22:37:16 Uhr
Goto Top
... und ergänzend zu T-Mo: Wozu wohl Kollege Batch - mit und ohne tee - Konsoleausgaben zugleich in eine Datei leiten und auf dem Bildschirm ausgeben" angetan hat?

Grüße
bastla
linguin
linguin 04.08.2012 um 08:41:53 Uhr
Goto Top
Morgen,

hast du ein Bespiel? Oder den Script?

LG
evinben
evinben 06.08.2012 um 07:51:55 Uhr
Goto Top
Danke an allen für die heißen Tipps!

Hallo Pjordorf,

ich habe mir die Lehrstoffe angeschaut – danke für die Links.
Nein. Die werden nicht unterdrückt sondern werden durch das > Zeichen umgeleitet. In deinem beispiel an das Gerät mit der internen Bezeichnung NUL.
So kenne ich es auch - mit „unterdrückt“ habe ich etwas lockerer formuliert…

Hallo Darkprodukt,

in einer FOR-Schleife wäre es meistens sicherlich kein Problem. Bei diesem Vorhaben wird die FOR-Schleife allerdings nicht angewendet.
Einmal für die Datei und einmal für die ausgabe. (ist aber nicht wirklich optimal)
Wobei, es fällt mir gerade ein, dass es in meinem Fall effektiv funktionieren müsste…
echo Datum: %Date%, Uhrzeit: %time%>"Protokoll.txt"  
for /f "tokens=* delims=" %%d in ('wbadmin Start backup -backupTarget:%Volume_GUID% -allCritical -vssFull -include:D:^,E: -quiet') do echo %%d &echo %%d>>"Protokol.txt"  

hallo linguin@
hast du ein Bespiel? Oder den Script?
der Befehl wäre wie folgt
wbadmin Start backup -backupTarget:%Volume_GUID% -allCritical -vssFull -include:D:,E: -quiet

Die Ausgabe soll in Echtzeit in der Eingabeaufforderung erfolgen und so könnte es gehen:
echo Datum: %Date%, Uhrzeit: %time%>"Protokoll.txt"  
wbadmin Start backup -backupTarget:%Volume_GUID% -allCritical -vssFull -include:D:,E: -quiet>Protokoll.txt | type Protokoll.txt

Da ich es momentan nicht testen kann, melde ich mich hier nochmal später.

Vielen Dank an allen!

Gruß
evinben
evinben
evinben 07.08.2012 um 17:10:22 Uhr
Goto Top
Hallo

leider funktionieren die beiden Methoden nicht. Die letzte Variante kommt nur in der Eingabeaufforderung in Echtzeit zum Laufen. Vom Batch aus gestartet, erfolgt die Ausgabe erst am Ende.

Mit wbadmin get status bekomme ich zwar den Status und somit die Lösung für diesen speziellen Fall, aber bei anderen Befehlen muss ich dann aufgraben...

Gruß
evinben
pieh-ejdsch
pieh-ejdsch 07.08.2012 um 19:33:27 Uhr
Goto Top
moin evinben,

der Tee ist aber vllt schon zu schnell weggelaufen.
Teste mal diesen Tee, der ist vllt etwas mehr durchgezogen und Zeigt Dir auch etwas Simultaner an:
@echo off
setlocal disabledelayedexpansion

 rem Befehl eingeben (-- escapen wie in der Forschleife --)
set "Befehl=dir /m /b /s D:\Musik\"   

 rem Logfile angeben
set "File=D:\Log.txt."  

del "%file%"  

start "Befehlseingabe hier" cmd /c "(%Befehl% )2>&1 |findstr /n ^^ >"%file%" "  
set /a n=0
:Ausgabe
(find /c /v "" <"%file%") 2>nul 1>&2 ||goto :Ausgabe  |findstr /b [1-9] >nul ||goto :Ausgabe  
for /f "delims=" %%i in ('findstr /e $ ^<"%file%" ^|more +%n% ^|find /v "" ') do (set /a n + = 1  
  set "Line=%%i"  
  setlocal enabledelayedexpansion
  echo(!Line:*:=!
  endlocal
)
findstr /ve $ "%file%" >nul 2>&1 && goto :Ausgabe  
for /f %%i in ('find /v /c "" ^<"%file%" ') do if %%i neq %n% goto :Ausgabe  
(type nul >>"%file%") 2>nul ||goto :Ausgabe  

Gruß Phil