Mit Batch eine Countdown Uhr erstellen
von 30 auf null zählen :D
Hallo
Hab hier ein kleinen Code Schnippsel
cls <----löscht den bildschriminhalt wieder
for /L %%A in (30,-1,0) do ( <---- 30 anfangszeit, -1 = minus 1 von 30 nachher 29 etc... , 0= endstation ;D
echo sie haben noch %%A sekunden zeit <------------ Hier ist die ausgabe %%A beinhaltet die aktuelle zahl
ping localhost -n 2 >nul <------------den localhost pingen ist nötig um die zeit in sekunden anzuzeigen, sonst würde es viel zu schnell runterzählen
cls <-löscht den bildschriminhalt wieder :D
viel spass
Hallo
Hab hier ein kleinen Code Schnippsel
@echo off
cls
for /L %%A in (30,-1,0) do (
echo sie haben noch %%A sekunden zeit
ping localhost -n 2 >nul
cls
)
cls <----löscht den bildschriminhalt wieder
for /L %%A in (30,-1,0) do ( <---- 30 anfangszeit, -1 = minus 1 von 30 nachher 29 etc... , 0= endstation ;D
echo sie haben noch %%A sekunden zeit <------------ Hier ist die ausgabe %%A beinhaltet die aktuelle zahl
ping localhost -n 2 >nul <------------den localhost pingen ist nötig um die zeit in sekunden anzuzeigen, sonst würde es viel zu schnell runterzählen
cls <-löscht den bildschriminhalt wieder :D
viel spass
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 138678
Url: https://administrator.de/knowledge/mit-batch-eine-countdown-uhr-erstellen-138678.html
Ausgedruckt am: 27.12.2024 um 22:12 Uhr
11 Kommentare
Neuester Kommentar
Hallo jack0swiss und willkommen im Forum!
Als Alternative etwas in der Art:
Mehr dazu zB hier: Echo ohne Zeilenumbruch und ähnliche Spielereien
Grüße
bastla
Als Alternative etwas in der Art:
@echo off & setlocal
set /a Sec=30
cls
<nul set /p=%Sec%
set /a Sec-=1
for /L %%A in (%Sec%,-1,0) do (
ping localhost -n 2 >nul
<nul set /p=...%%A
)
Grüße
bastla
Hi,
es gibt aber auch die Möglichkeit auf einer Zeile mehrfach zu schreiben ohne das die neuen Zeichen angehängt werden.
Man braucht nur ein CR Zeichen ausgeben.
Da gibt es jetzt allerdings zwei Dinge zu beachten, üblicherweise packe ich mir ein CR in eine Variable, dann kann man diese nur mit der !myCR! ausgeben %myCR% hat nicht die gewünschte Wirkung.
Zweitens kann man unter Vista mit dem set /p Befehl keine Whitespace Zeichen am Anfang mehr ausgeben (unter XP geht das noch).
Bei Vista werden diese einfach geschluckt, aber als Lösung kann man einfach ein nicht Whitespace als erstes ausgeben.
Jetzt stellt sich der geneigte Leser wahrscheinlich noch die eigentliche Frage wie man überhaupt ein CR Zeichen in eine Variable bekommt.
Variante1. Man benötige XP und verwende ipconfig
Die Variante ist toll, weil bei der Ausgabe von ipconfig Microsoft offenbar vergessen hat wie die Zeilenenden bei Microsoft aussehen, sprich statt CRLF
gibt ipconfig LFCR aus.
Aber läuft halt nur unter XP (und hab ich nur in der deutschen Variante getestet).
Variante2. Man verwende debug.exe (auf jedem System vorhanden) oder eine Hexeditor und erzeuge eine Datei mit zwei CR Zeichen, kann man auch mit der batch Datei selbst machen.
Variante3. Man gebe einen recht langen String in eine Datei aus, und lese diese wieder ein, dazu muss der String allerdings gerade so lang sein, dass der Batch Interpreter noch in der Lage ist das CR auszugeben aber nicht mehr das LF.
Also alles in allem recht offensichtliche Wege um mal schnell an ein einzelnes CR zu kommen.
Aber wenn man es dann mal hat, kann man endlich "auf der Stelle" Text ausgeben.
Btw. Mit Backspace klappt das übrigens auch, allerdings kann ich das nur mit Variante 2 erzeugen, dafür wird ein Backspace nicht als Whitespace angesehen,
Wer jetzt auf die tolle Idee kommt statt z.B. "X!myCR!Neuer Text", das "X" durch Alt-255 (geschützes Leerzeichen) zu ersetzen, ja war eine gute Idee, hatte ich auch, aber Vista ist ja nicht blöd
es gibt aber auch die Möglichkeit auf einer Zeile mehrfach zu schreiben ohne das die neuen Zeichen angehängt werden.
Man braucht nur ein CR Zeichen ausgeben.
Da gibt es jetzt allerdings zwei Dinge zu beachten, üblicherweise packe ich mir ein CR in eine Variable, dann kann man diese nur mit der !myCR! ausgeben %myCR% hat nicht die gewünschte Wirkung.
Zweitens kann man unter Vista mit dem set /p Befehl keine Whitespace Zeichen am Anfang mehr ausgeben (unter XP geht das noch).
Bei Vista werden diese einfach geschluckt, aber als Lösung kann man einfach ein nicht Whitespace als erstes ausgeben.
Jetzt stellt sich der geneigte Leser wahrscheinlich noch die eigentliche Frage wie man überhaupt ein CR Zeichen in eine Variable bekommt.
Variante1. Man benötige XP und verwende ipconfig
Die Variante ist toll, weil bei der Ausgabe von ipconfig Microsoft offenbar vergessen hat wie die Zeilenenden bei Microsoft aussehen, sprich statt CRLF
gibt ipconfig LFCR aus.
Aber läuft halt nur unter XP (und hab ich nur in der deutschen Variante getestet).
Variante2. Man verwende debug.exe (auf jedem System vorhanden) oder eine Hexeditor und erzeuge eine Datei mit zwei CR Zeichen, kann man auch mit der batch Datei selbst machen.
Variante3. Man gebe einen recht langen String in eine Datei aus, und lese diese wieder ein, dazu muss der String allerdings gerade so lang sein, dass der Batch Interpreter noch in der Lage ist das CR auszugeben aber nicht mehr das LF.
Also alles in allem recht offensichtliche Wege um mal schnell an ein einzelnes CR zu kommen.
Aber wenn man es dann mal hat, kann man endlich "auf der Stelle" Text ausgeben.
Btw. Mit Backspace klappt das übrigens auch, allerdings kann ich das nur mit Variante 2 erzeugen, dafür wird ein Backspace nicht als Whitespace angesehen,
Wer jetzt auf die tolle Idee kommt statt z.B. "X!myCR!Neuer Text", das "X" durch Alt-255 (geschützes Leerzeichen) zu ersetzen, ja war eine gute Idee, hatte ich auch, aber Vista ist ja nicht blöd
Hallo bastla,
noch Variante3, damit man nicht probieren muss
jeb
noch Variante3, damit man nicht probieren muss
@echo off
setlocal EnableDelayedExpansion
Call :CreateCR
for /L %%n IN (1 1 1000) DO (
<nul set /p "=Count is now %%n!cr!
)
echo\
goto :eof
:CreateCR
setlocal EnableDelayedExpansion EnableExtensions
set "X=."
for /L %%c in (1,1,13) DO set X=!X:~0,4094!!X:~0,4094!
echo !X! > %temp%\cr.tmp
echo\>> %temp%\cr.tmp
for /f "tokens=2 usebackq" %%a in ("%temp%\cr.tmp") do (
endlocal
set cr=%%a
goto :eof
)
goto :eof
jeb
Kleine anmerkung
je nach schnelligkeit des systems ist die zeit die er zum selfping bruacht unterschiedlich
der alte p3 im büro braucht für "2" ca 1 sec..
mein gaming pc mit 6Kerner bruacht für 1 sec mindestens "8-10"
ping localhost -n 2 >nul <------------den localhost pingen ist nötig um die zeit in sekunden anzuzeigen, sonst würde es viel zu schnell runterzählen
je nach schnelligkeit des systems ist die zeit die er zum selfping bruacht unterschiedlich
der alte p3 im büro braucht für "2" ca 1 sec..
mein gaming pc mit 6Kerner bruacht für 1 sec mindestens "8-10"
@Planlos89
Mehr Kontrolle = mehr Aufwand; also entweder die Pause zB über ein kleines VBScript erzeugen oder etwa die "sleep.exe" (aus den "Windows Server 2003 Resource Kit Tools") verwenden ...
Grüße
bastla
Mehr Kontrolle = mehr Aufwand; also entweder die Pause zB über ein kleines VBScript erzeugen oder etwa die "sleep.exe" (aus den "Windows Server 2003 Resource Kit Tools") verwenden ...
Grüße
bastla