Ausgabe aktualisieren
Moin zusammen,
ich hab n kleine Problem. und vllt weiß ja jmd von euch wie ich es lösen kann
Folgendes
Ich habe wie auch gestern schon einen Chat mi Batch und habe dann gestern auch die Ausgabe gebastelt.
Jetzt hätte ich gerne dass die ausgabe immer automatisch aktualisiert wird
soweit hab ich das jetzt
Sprich er vergleich die beiden Log-Dateien und wenn es einen unterschied gibt dann aktualsiert er.
Aber damit das ganz auch sinn macht müsste ich es in eine Dauerschleife setzen. Problem ist jetzt
dass er zwischen durch auch noch das hier machen muss
Sprich er muss schauen ob jmd etwas schreiben möchte.
nun meine Frage. Glaubt ihr dass lässt sich realisieren? Mit VBScript, JavaScript, Batch? Oder muss ich mir was in C# einfallen lassen?
Bin mal auf eure hinweise gespannt.
Grüße
Bankaifan
[OT]Solch kompliziertes Denken so früh am Morgen is nicht gut. Ich hol mir ma nen Kaffee [/OT]
EDIT: Wäre da "choice" einen gedanken wert? Ich hab gelesen da kann man sagen dass z. B. für 5 sec ne abfrage gemacht wird und anschließend geht er automatisch weiter?
???
ich hab n kleine Problem. und vllt weiß ja jmd von euch wie ich es lösen kann
Folgendes
Ich habe wie auch gestern schon einen Chat mi Batch und habe dann gestern auch die Ausgabe gebastelt.
Jetzt hätte ich gerne dass die ausgabe immer automatisch aktualisiert wird
fc /B %MyLW%\docs\datas\sources\log\%roomname%.room Y:\Chat\log\%roomname%.room>nul
if %ERRORLEVEL% GTR 0 (
for /f "delims=:" %%i in ('findstr /n $ %MyLW%\docs\datas\sources\log\%roomname%.room') do set /a "lines=%%i"
set /a lines-=10
more +%lines% %MyLW%\docs\datas\sources\log\%roomname%.room)
copy %MyLW%\docs\datas\sources\log\%roomname%.room Y:\Chat\log\%roomname%.room>nul
soweit hab ich das jetzt
Sprich er vergleich die beiden Log-Dateien und wenn es einen unterschied gibt dann aktualsiert er.
Aber damit das ganz auch sinn macht müsste ich es in eine Dauerschleife setzen. Problem ist jetzt
dass er zwischen durch auch noch das hier machen muss
set /P input= Message:
Sprich er muss schauen ob jmd etwas schreiben möchte.
nun meine Frage. Glaubt ihr dass lässt sich realisieren? Mit VBScript, JavaScript, Batch? Oder muss ich mir was in C# einfallen lassen?
Bin mal auf eure hinweise gespannt.
Grüße
Bankaifan
[OT]Solch kompliziertes Denken so früh am Morgen is nicht gut. Ich hol mir ma nen Kaffee [/OT]
EDIT: Wäre da "choice" einen gedanken wert? Ich hab gelesen da kann man sagen dass z. B. für 5 sec ne abfrage gemacht wird und anschließend geht er automatisch weiter?
choice 1 goto :Eingabe 5sec warten goto :aktualisieren
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 25.09.2010 um 01:34:30 Uhr
Titel editiert.
Content-ID: 151676
Url: https://administrator.de/contentid/151676
Ausgedruckt am: 05.11.2024 um 15:11 Uhr
17 Kommentare
Neuester Kommentar
Du hast ne ausgabe.bat und eine eingabe.bat. Die eingabe besteht (vereinfacht) nur aus:
Die Ausgabe besteht (vereinfacht) aus:
@echo off
:loop
set /P input= Message:
echo %input% >%MyLW%\docs\datas\sources\log\%roomname%.room
goto:loop
Die Ausgabe besteht (vereinfacht) aus:
@echo off
:loop
fc /B %MyLW%\docs\datas\sources\log\%roomname%.room Y:\Chat\log\%roomname%.room>nul
if %ERRORLEVEL% GTR 0 (
for /f "delims=:" %%i in ('findstr /n $ %MyLW%\docs\datas\sources\log\%roomname%.room') do set /a "lines=%%i"
set /a lines-=10
more +%lines% %MyLW%\docs\datas\sources\log\%roomname%.room)
copy %MyLW%\docs\datas\sources\log\%roomname%.room Y:\Chat\log\%roomname%.room>nul
rem warte 1s
ping localhost -n 2 >NUL
goto:loop
Da ich, wie der Name schon sagt, der Pure-Batch Verfechter bin hier eine Lösung mit reinem Batch.
Der Vorschlag von miniversum ist an sich OK, und sieht man auch recht oft. Man kann die beiden Fenster auch ganz nett mit MODE auf die gewünschte größe bringen.
Die zweite Methode ist eher unbekannt (genau genommen habe ich die noch nie woanders gesehen).
Die "EINE FENSTER" Methode, mit der man mehrere Batchdateien in einem cmd-Fenster starten kann, es darf natürlich auch mehrmals die selbe Datei sein.
Das ganze basiert auf Pipes, bei Pipes werden beide Seiten gestartet und laufen asynchron.
Eine kleine Demo.
[Edit]
call "./?FuncA?ThreadA?3?/../%~0" | call "./?FuncB?ThreadB?2?/../%~0"
durch dies ersetzt
call "%~dp0/?FuncA?ThreadA?3?/../%~nx0" | call "%~dp0/?FuncB?ThreadB?2?/../%~nx0"
Weil es sonst fehlschlägt, wenn man das Batchfile mit einem Pfad gestartet hat
[/Edit]
Ausgabe
jeb
Der Vorschlag von miniversum ist an sich OK, und sieht man auch recht oft. Man kann die beiden Fenster auch ganz nett mit MODE auf die gewünschte größe bringen.
Die zweite Methode ist eher unbekannt (genau genommen habe ich die noch nie woanders gesehen).
Die "EINE FENSTER" Methode, mit der man mehrere Batchdateien in einem cmd-Fenster starten kann, es darf natürlich auch mehrmals die selbe Datei sein.
Das ganze basiert auf Pipes, bei Pipes werden beide Seiten gestartet und laufen asynchron.
Eine kleine Demo.
@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1-5 delims=? eol=:" %%a IN ("%0") do (
if "%%b" == "" (
goto :StartMultiThread
) ELSE (
call :%%b %%c %%d %%e > con
)
)
goto :eof
rem goto :StartMultiThread
:FuncA
for /L %%n in (1,1,5) do (
ping -n %2 127.0.0.1 > nul
echo !time! %1 cnt=%%n > con
)
goto :eof
:FuncB
for /L %%n in (1,1,5) do (
ping -n %2 127.0.0.1 > nul
echo !time! %1 cnt=%%n
)
goto :eof
::::::::::::::::::::::::::::::::::
:: Startet zwei Instanzen dieser Batchdatei
:StartMultiThread
echo Starte zwei Threads
call "%~dp0/?FuncA?ThreadA?3?/../%~nx0" | call "%~dp0/?FuncB?ThreadB?2?/../%~nx0"
echo Programm Ende
goto :eof
[Edit]
call "./?FuncA?ThreadA?3?/../%~0" | call "./?FuncB?ThreadB?2?/../%~0"
durch dies ersetzt
call "%~dp0/?FuncA?ThreadA?3?/../%~nx0" | call "%~dp0/?FuncB?ThreadB?2?/../%~nx0"
Weil es sonst fehlschlägt, wenn man das Batchfile mit einem Pfad gestartet hat
[/Edit]
Ausgabe
Starte zwei Threads
18:27:09,24 ThreadB cnt=1
18:27:10,24 ThreadA cnt=1
18:27:10,27 ThreadB cnt=2
18:27:11,30 ThreadB cnt=3
18:27:12,27 ThreadA cnt=2
18:27:12,33 ThreadB cnt=4
18:27:13,36 ThreadB cnt=5
18:27:13,36 ThreadB Ende
18:27:14,30 ThreadA cnt=3
18:27:16,32 ThreadA cnt=4
18:27:18,35 ThreadA cnt=5
18:27:18,35 ThreadA Ende
Programm Ende
18:27:09,24 ThreadB cnt=1
18:27:10,24 ThreadA cnt=1
18:27:10,27 ThreadB cnt=2
18:27:11,30 ThreadB cnt=3
18:27:12,27 ThreadA cnt=2
18:27:12,33 ThreadB cnt=4
18:27:13,36 ThreadB cnt=5
18:27:13,36 ThreadB Ende
18:27:14,30 ThreadA cnt=3
18:27:16,32 ThreadA cnt=4
18:27:18,35 ThreadA cnt=5
18:27:18,35 ThreadA Ende
Programm Ende
jeb
Pipes sind ein wenig schwierig, besonders bei Ein/Ausgaben, teilweise werden keine Zeilenumbrüche ausgegeben sondern die dahinter liegenden Ascii-Zeichen.
Der Code von bankifan wird so nicht funktionieren, die ganzen Ausgaben sollten in einen Thread verschoben werden, weil sonst wird versucht den ganzen kram dreimal auszugeben
Beim ersten starten der Batch und jeweils pro Thread.
Ein kleines Beispiel mit set /p
jeb
Der Code von bankifan wird so nicht funktionieren, die ganzen Ausgaben sollten in einen Thread verschoben werden, weil sonst wird versucht den ganzen kram dreimal auszugeben
Beim ersten starten der Batch und jeweils pro Thread.
Ein kleines Beispiel mit set /p
@echo off
setlocal EnableDelayedExpansion
for /F "tokens=1-5 delims=? eol=:" %%a IN ("%0") do (
if "%%b" == "" (
goto :StartMultiThread
) ELSE (
call :%%b %%c %%d %%e > con
)
)
goto :eof
:::: Dies ist der erste Task, die normale Ausgabe geht an die Pipe, daher verwende ich hier eine Umleitung nach con
:FuncA
for /L %%n in (1,1,5) do (
ping -n %2 127.0.0.1 > nul
echo !time! %1 cnt=%%n > con
)
goto :eof
:::: Dies ist der zweite Task, die normale Eingabe kommt aus der Pipe, daher verwende ich hier eine Umleitung von con
:FuncB
set /p var=Gibs mir: < con
if %errorlevel% NEQ 0 goto :eof
if "%var%"=="" goto :eof
echo( > con
echo( Eingabe=%var%
goto :FuncB
::::::::::::::::::::::::::::::::::
:: Startet zwei Instanzen dieser Batchdatei
:StartMultiThread
echo Starte zwei Threads
call "%~dp0/?FuncA?ThreadA?3?/../%~nx0" | call "%~dp0/?FuncB?ThreadB?2?/../%~nx0"
echo Programm Ende
goto :eof
jeb
Also "cls" ist kein Problem, zumindestens aus dem zweiten Thread.
"echo" gibt teilweise Probleme, wenn aus beiden Threads Ausgaben auf >con gemacht werden.
Manchmal werden statt Zeilenumbrüche die Zeichen aus dem Zeichensatz ausgegeben also <cr><lf> wird zu ?? (kann ich hier nicht darstellen)
Scheint nicht zu passieren wenn man nur aus einem Task ausgaben macht.
Sprich man darf nur einen Viewer-Task erzeugen und alle anderen sind Worker oder Eingabe-Tasks.
Das nutze ich z.B. um mehrere Netzwerksynchronisierungen "gleichzeitig" durchzuführen, so dass bei Blockade einer Sync-Task nicht gleich alle warten müssen.
"echo" gibt teilweise Probleme, wenn aus beiden Threads Ausgaben auf >con gemacht werden.
Manchmal werden statt Zeilenumbrüche die Zeichen aus dem Zeichensatz ausgegeben also <cr><lf> wird zu ?? (kann ich hier nicht darstellen)
Scheint nicht zu passieren wenn man nur aus einem Task ausgaben macht.
Sprich man darf nur einen Viewer-Task erzeugen und alle anderen sind Worker oder Eingabe-Tasks.
Das nutze ich z.B. um mehrere Netzwerksynchronisierungen "gleichzeitig" durchzuführen, so dass bei Blockade einer Sync-Task nicht gleich alle warten müssen.