jack0swiss
Goto Top

Mit Batch eine Countdown Uhr erstellen

von 30 auf null zählen :D

Hallo face-smile


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

Content-Key: 138678

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

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: bastla
bastla 19.03.2010, aktualisiert am 18.10.2012 um 18:41:26 Uhr
Goto Top
Hallo jack0swiss und willkommen im Forum!

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
)
Mehr dazu zB hier: Echo ohne Zeilenumbruch und ähnliche Spielereien

Grüße
bastla
Mitglied: jack0swiss
jack0swiss 25.03.2010 um 00:10:25 Uhr
Goto Top
Hi Bastla


Danke für die herzliche einladung. oh ja sieht gut aus :D leider fügt es immer die zahl hintereinander an.

gruss
jack
Mitglied: bastla
bastla 25.03.2010 um 00:17:17 Uhr
Goto Top
Hallo jack0swiss!
leider fügt es immer die zahl hintereinander an.
... was ja auch der Plan ist (und weswegen ich es "Alternative" genannt habe) ... face-wink

Grüße
bastla
Mitglied: jack0swiss
jack0swiss 26.03.2010 um 00:14:50 Uhr
Goto Top
Hi Bastla


oh ;D du gut, ich schlecht

grüsse
jack
Mitglied: bastla
bastla 26.03.2010 um 07:45:20 Uhr
Goto Top
Hallo jack0swiss!

Das ist sicherlich keine Frage von "gut" oder "schlecht" - die Leser Deines Tipps haben ganz einfach eine Option mehr ... face-smile

Grüße
bastla
Mitglied: jeb-the-batcher
jeb-the-batcher 06.06.2010 um 23:52:29 Uhr
Goto Top
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 face-sad
Mitglied: bastla
bastla 07.06.2010 um 00:05:19 Uhr
Goto Top
Hallo jeb-the-batcher und willkommen im Forum!
... aber Vista ist ja nicht blöd face-sad
Ob man das einfach so stehen lassen kann ... face-wink

Deine Vorschläge sehen jedenfalls durchaus interessant aus ... face-smile

Grüße
bastla
Mitglied: jeb-the-batcher
jeb-the-batcher 07.06.2010 um 00:24:08 Uhr
Goto Top
Hallo bastla,

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
Mitglied: Planlos89
Planlos89 13.01.2011 um 07:47:26 Uhr
Goto Top
Kleine anmerkung face-smile

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"
Mitglied: bastla
bastla 13.01.2011 um 08:52:05 Uhr
Goto Top
@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
Mitglied: Planlos89
Planlos89 13.01.2011 um 09:10:13 Uhr
Goto Top
war nur ne anmerkung das man das beachten muss;)