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

Printed on: April 26, 2024 at 03:04 o'clock

Member: bastla
bastla Mar 19, 2010, updated at Oct 18, 2012 at 16:41:26 (UTC)
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
Member: jack0swiss
jack0swiss Mar 24, 2010 at 23:10:25 (UTC)
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
Member: bastla
bastla Mar 24, 2010 at 23:17:17 (UTC)
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
Member: jack0swiss
jack0swiss Mar 25, 2010 at 23:14:50 (UTC)
Goto Top
Hi Bastla


oh ;D du gut, ich schlecht

grüsse
jack
Member: bastla
bastla Mar 26, 2010 at 06:45:20 (UTC)
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
Member: jeb-the-batcher
jeb-the-batcher Jun 06, 2010 at 21:52:29 (UTC)
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
Member: bastla
bastla Jun 06, 2010 at 22:05:19 (UTC)
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
Member: jeb-the-batcher
jeb-the-batcher Jun 06, 2010 at 22:24:08 (UTC)
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
Member: Planlos89
Planlos89 Jan 13, 2011 at 06:47:26 (UTC)
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"
Member: bastla
bastla Jan 13, 2011 at 07:52:05 (UTC)
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
Member: Planlos89
Planlos89 Jan 13, 2011 at 08:10:13 (UTC)
Goto Top
war nur ne anmerkung das man das beachten muss;)