Mittels Batch Zeit bis ausgeben
Guten Tag
Bin neu hier, und habe mir mittels Batch einen Script geschrieben, der eine Zeit bis zu einem Datum runter zählt.
Naja, selbst geschrieben nur Teilweise, der groß teil stammt hier aus dem Forum, den ich zusammen kopiert habe (ich hoffe das ist erlaubt)
Wollte jetzt mal fragen, ob sich mal jemand den Script anschauen könnte, und mir eventuelle Tipps gegen kann, was sich verbessern liese.
Zurzeit flackert es ziemlich und sieht daher nicht gut aus.
Auch habe ich die befürchte, das ich mir damit das System zerschießen kann, wenn der Script länger wie einige Stunden läuft. (endlos schleife)
Der Großteil ist von hier:
Über Batch die vergangene Zeit zwischen zwei Daten berechnen
Dort habe ich dan sozusagen meinen teil noch mit angehängt.
So sieht es bisher aus:
Die zweite Frage wäre, rechnet er richtig? 91 Tage scheint mir etwas lang zu sein.
Auch zählt er manchmal 2s runter, was auch nicht sein soll.
Schonmal Danke für eine Antwort
Mfg
Power-Poler
Achso
BS: Windows 7 Home Premium 64bit (Falls die Befehle von BS zu BS abweichen können)
Bin neu hier, und habe mir mittels Batch einen Script geschrieben, der eine Zeit bis zu einem Datum runter zählt.
Naja, selbst geschrieben nur Teilweise, der groß teil stammt hier aus dem Forum, den ich zusammen kopiert habe (ich hoffe das ist erlaubt)
Wollte jetzt mal fragen, ob sich mal jemand den Script anschauen könnte, und mir eventuelle Tipps gegen kann, was sich verbessern liese.
Zurzeit flackert es ziemlich und sieht daher nicht gut aus.
Auch habe ich die befürchte, das ich mir damit das System zerschießen kann, wenn der Script länger wie einige Stunden läuft. (endlos schleife)
Der Großteil ist von hier:
Über Batch die vergangene Zeit zwischen zwei Daten berechnen
Dort habe ich dan sozusagen meinen teil noch mit angehängt.
So sieht es bisher aus:
@echo off
:Test
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%
set test2=%time:~0,2%:%time:~3,2%:%time:~6,2%
set Test=%tag%.%monat%.%jahr%-%test2%
::echo %Test%
set "Von=%Test%"
set "Bis=18.04.2011-13:49:02"
set G=%temp%\GetTimeDiff.vbs
>%G% echo D=CDate(Replace(WScript.Arguments(1),"-"," "))-CDate(Replace(WScript.Arguments(0),"-"," ")):WScript.Echo Int(D)^&" "^&Hour(D)^&" "^&Minute(D)^&" "^&Second(D)
for /f "tokens=1-4" %%a in ('cscript //nologo %G% "%Von%" "%Bis%"') do echo %%a Tage %%b Stunden %%c Minuten %%d Sekunden
sleep.exe 1
cls
goto Test
Die zweite Frage wäre, rechnet er richtig? 91 Tage scheint mir etwas lang zu sein.
Auch zählt er manchmal 2s runter, was auch nicht sein soll.
Schonmal Danke für eine Antwort
Mfg
Power-Poler
Achso
BS: Windows 7 Home Premium 64bit (Falls die Befehle von BS zu BS abweichen können)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 158751
Url: https://administrator.de/forum/mittels-batch-zeit-bis-ausgeben-158751.html
Ausgedruckt am: 21.02.2025 um 11:02 Uhr
19 Kommentare
Neuester Kommentar

Hallo Power-Poler!
Also, mit dem heutigem Tag gerechnet sind es 92 Tage und wenn Du das Script in Codezeile 17 (1 Sekunde Pause) jedesmal für eine Sekunde anhälts, dann ist es kein Wunder, dass es ab und an 1 Sekunde überspringt
Und anstatt runterzuzählen meinst Du sicherlich hochzählen (von Heute - bis April)
Könnte man in etwa so zusammenfassen:
Gruß Dieter
[edit] Auf Bibers Anregung hin entsprechend geändert [/edit]
@Biber
Hab ich wohl etwas geschlafen
Also, mit dem heutigem Tag gerechnet sind es 92 Tage und wenn Du das Script in Codezeile 17 (1 Sekunde Pause) jedesmal für eine Sekunde anhälts, dann ist es kein Wunder, dass es ab und an 1 Sekunde überspringt
Und anstatt runterzuzählen meinst Du sicherlich hochzählen (von Heute - bis April)
Könnte man in etwa so zusammenfassen:
@echo off & setlocal
set G=%temp%\GetTimeDiff.vbs
set "Bis=18.04.2011 13:49:02"
>%G% echo WScript.Echo Join(Array(DateDiff("d", Now, CDate(WScript.Arguments(0))), Hour(Time), Minute(Time), Second(Time)))
:Test
for /f "tokens=1-4" %%a in ('cscript //nologo %G% "%Bis%"') do echo %%a Tage %%b Stunden %%c Minuten %%d Sekunden
Rem sleep.exe 1
Rem cls
Rem goto Test
Gruß Dieter
[edit] Auf Bibers Anregung hin entsprechend geändert [/edit]
@Biber
Hab ich wohl etwas geschlafen
Hallo Power-Poler, hallo Didi und Biber.
Um das Flackern zu verhindern kannst du mit dem Erzeugung von ESC,CR,LF und DEL mit reinem Batch Zeichen arbeiten (was unter Win7 nicht mehr so einfach ist, da CR und White Spaces in SET /P als erste Zeichen eliminiert werden).
Alle anderen Vorschläge mal mit eingebunden könnte das so aussehen:
Grüße
rubberman
<EDIT: Zeile 10 angepasst. />
Um das Flackern zu verhindern kannst du mit dem Erzeugung von ESC,CR,LF und DEL mit reinem Batch Zeichen arbeiten (was unter Win7 nicht mehr so einfach ist, da CR und White Spaces in SET /P als erste Zeichen eliminiert werden).
Alle anderen Vorschläge mal mit eingebunden könnte das so aussehen:
@echo off &setlocal enabledelayedexpansion
set "Bis=18.04.2011 13:49:02"
:: CR erzeugen
for /f %%a in ('copy /z "%~f0" nul') do set "cr=%%a"
:: VBScript erzeugen
set G=%temp%\GetTimeDiff.vbs
>%G% echo D=CDate(WScript.Arguments(0))-Now:WScript.Echo Int(D)^&" "^&Hour(D)^&" "^&Minute(D)^&" "^&Second(D)
:Test
:: VBScript aufrufen
for /f "tokens=1-4" %%a in ('cscript //nologo "%G%" "%Bis%"') do set "output=%%a Tage %%b Stunden %%c Minuten %%d Sekunden"
:: alte Ausgabe überschreiben
<nul set /p ".=.!cr! !cr!"
:: neue Ausgabe schreiben
<nul set /p ".=%output%"
goto Test
Grüße
rubberman
<EDIT: Zeile 10 angepasst. />

Hallo Power-Poler!
Sorry, da stand ich wohl irgendwie auf der Leitung, aber rubbermann hat's ja gerichtet
Gruß Dieter
Sorry, da stand ich wohl irgendwie auf der Leitung, aber rubbermann hat's ja gerichtet
Gruß Dieter
Hallo Power-Poler.
Das Flackern lässt sich nicht ganz abstellen und dass das Flackern nicht über die gesamte Ausgabe kommt liegt daran, dass du durch deine Erweiterung nicht mehr die gesamte Zeile überschreibst, was aber andererseits zu einer fehlerhaften Ausgabe führt (wenn du mal einen sinnvollen Text dran hängst, wirst du es merken). Du musst die Anzahl der Leerzeichen zwischen dem ersten und dem zweiten !cr! entsprechend erhöhen.
Grüße
rubberman
Das Flackern lässt sich nicht ganz abstellen und dass das Flackern nicht über die gesamte Ausgabe kommt liegt daran, dass du durch deine Erweiterung nicht mehr die gesamte Zeile überschreibst, was aber andererseits zu einer fehlerhaften Ausgabe führt (wenn du mal einen sinnvollen Text dran hängst, wirst du es merken). Du musst die Anzahl der Leerzeichen zwischen dem ersten und dem zweiten !cr! entsprechend erhöhen.
Grüße
rubberman
Hallo zusammen,
das Flackern läßt sich ganz abstellen.
Man darf nur bei der Ausgabe nicht erst löschen und dann neu schreiben, sondern jeweils nur einmal mit dem neuen Inhalt überschreiben.
Dazu sollte man aber den neuen Inhalt an die Länge anpassen.
Also in etwa
Schreibt also jeweils 40 Zeichen in die Zeile
Oder als Test
Grüße
jeb
das Flackern läßt sich ganz abstellen.
Man darf nur bei der Ausgabe nicht erst löschen und dann neu schreiben, sondern jeweils nur einmal mit dem neuen Inhalt überschreiben.
Dazu sollte man aber den neuen Inhalt an die Länge anpassen.
Also in etwa
set "spaces= "
set "output=!output!!spaces!"
<nul set /p ".=!output:~0,40!!cr!"
Oder als Test
@echo off
SETLOCAL EnableDelayedExpansion
cls
set "spaces= "
for /f %%a in ('copy /z "%~f0" nul') do set "cr=%%a"
for /L %%n in (1,1,100000) DO (
set "output=Die aktuelle Zahl ist %%n"
set "output=!output!!spaces!"
<nul set /p ".=!output:~0,40!!cr!"
)
Grüße
jeb

Hallo zusammen!
Hier mal ne Lösung in HTA (*.hta) ohne flackern:
Gruß Dieter
Hier mal ne Lösung in HTA (*.hta) ohne flackern:
<html>
<head>
<title>Countdownzähler</title>
<HTA:APPLICATION
ID = "objAutoRefresh"
ApplicationName = "Countdownzähler"
SCROLL = "no"
SINGLEINSTANCE="yes"/>
</head>
<SCRIPT LANGUAGE="VBScript">
Sub Window_OnLoad()
Window.ResizeTo 325, 140
Window.MoveTo ((Screen.Width - 325) / 2), ((Screen.Height - 140) / 2)
Text.InnerHTML = "Bis zum 18.04.2011 13:49:02 sind es noch:<p>"
Call RefreshTime
iTimerID = Window.setInterval("RefreshTime", 100)
End Sub
Sub RefreshTime()
D = CDate("18.04.2011 13:49:02") - Now
With document.all
.Tag.Value = Right(" " & Int(D), 6)
.Std.Value = " " & Right("0" & Hour(D), 2)
.Min.Value = " " & Right("0" & Minute(D), 2)
.Sek.Value = " " & Right("0" & Second(D), 2)
End With
End Sub
</SCRIPT>
<body bgcolor='buttonface' style='font-family:Arial;font-size:12px'><span id = "Text"></span>
<table border='0' style='font-family:Arial;font-size:12px'>
<tr>
<td><input type='text' name='Tag' value='' readonly='readonly' size='1' style='font-family:Arial;font-size:12px'></td>
<td>Tage </td>
<td><input type='text' name='Std' value='' readonly='readonly' size='1' style='font-family:Arial;font-size:12px'></td>
<td>Std </td>
<td><input type='text' name='Min' value='' readonly='readonly' size='1' style='font-family:Arial;font-size:12px'></td>
<td>Min </td>
<td><input type='text' name='Sek' value='' readonly='readonly' size='1' style='font-family:Arial;font-size:12px'></td>
<td>Sek </td>
</tr>
</table>
</body></html>
Gruß Dieter
Zitat von @rubberman:
Richtig. Aber diese Form führt dazu, dass der Cursor immer am Zeilenanfang steht, was bei langsamen Schleifen (wie die vom
TO) dazu führt, dass er dort sichtbar wird. In meinen Augen auch nicht schöner
Richtig. Aber diese Form führt dazu, dass der Cursor immer am Zeilenanfang steht, was bei langsamen Schleifen (wie die vom
TO) dazu führt, dass er dort sichtbar wird. In meinen Augen auch nicht schöner
Hallo rubbermann,
auch kein Problem, dann muss man nur die Zeile umstellen, dann steht der cursor auch am Ende
<nul set /p ".=.!del!!cr!!output:~0,40!"
Grüße
jeb
Hallo jeb,
das ist natürlich eine Idee (an DEL hatte ich nicht gedacht).
Im ganzen Satz Batch 
Grüße
rubberman
das ist natürlich eine Idee (an DEL hatte ich nicht gedacht).
Im ganzen
@echo off &setlocal enabledelayedexpansion
set "Bis=18.04.2011 13:49:02"
:: CR erzeugen
for /f %%a in ('copy /z "%~f0" nul') do set "cr=%%a"
: DEL erzeugen
for /f "delims=#" %%a in ('"prompt #$H# &echo on &for %%b in (1) do rem"') do set "del=%%a"
:: VBScript erzeugen
set G=%temp%\GetTimeDiff.vbs
>%G% echo D=CDate(WScript.Arguments(0))-Now:WScript.Echo Int(D)^&" "^&Hour(D)^&" "^&Minute(D)^&" "^&Second(D)
:Test
:: VBScript aufrufen
for /f "tokens=1-4" %%a in ('cscript //nologo "%G%" "%Bis%"') do set "output=%%a Tage %%b Stunden %%c Minuten %%d Sekunden "
:: neue Ausgabe schreiben
<nul set /p ".=.!del!!cr!%output:~,45%"
goto Test
Grüße
rubberman

Hallo Power-Poler!
HTA ist in vielen Dingen ganz nützlich und bietet in Verbindung mit VBS sehr viele Möglichkeiten.
Kurzbeschreibung:
Das Akronym HTA steht für HTMLApplication (HTML Anwendung). Es ist eine von Microsoft geschaffene Plattform für das Schreiben von Anwendungen die auf den normalen Standards von Internetseiten funktionieren (HTML, CSS, JavaScript, DOM...). Zusätzlich unterstüzt diese weitere Funktionen, die in normalen Web-Dokumenten nicht enthalten sind/sein können. HTA erstellt dabei eine selbstlaufende Anwendung die, ähnlich bei normalen Programmen, ausgeführt und verarbeitet werden kann.
Weitere Info's z.B. hier:
http://www.html-world.de/program/hta_ov.php
http://de.wikipedia.org/wiki/HTML-Applikation
Gruß Dieter
HTA ist in vielen Dingen ganz nützlich und bietet in Verbindung mit VBS sehr viele Möglichkeiten.
Kurzbeschreibung:
Das Akronym HTA steht für HTMLApplication (HTML Anwendung). Es ist eine von Microsoft geschaffene Plattform für das Schreiben von Anwendungen die auf den normalen Standards von Internetseiten funktionieren (HTML, CSS, JavaScript, DOM...). Zusätzlich unterstüzt diese weitere Funktionen, die in normalen Web-Dokumenten nicht enthalten sind/sein können. HTA erstellt dabei eine selbstlaufende Anwendung die, ähnlich bei normalen Programmen, ausgeführt und verarbeitet werden kann.
Weitere Info's z.B. hier:
http://www.html-world.de/program/hta_ov.php
http://de.wikipedia.org/wiki/HTML-Applikation
Gruß Dieter