Batch timeout Zeit "anzeigen"?
Hey. Wie kann ich bei Batch machen das die Zeit vom Timeout angezeigt wird. Also das da steht "Der Timer läuft noch X Sekunden". Danke schonmal im Vorraus.
2 Antworten
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, Windows, Batch
Ich will aber das ausgegeben wird wie lang der Timer noch geht. Wie es oben steht...
Es gibt keine Möglichkeit den Output von Timeout in ein eigenes Textkonstrukt umzuleiten, ergo bleibt nur eine handgestrickte Routine .
- setze die Zahl in einer Zählschleife (Topdown)
- gib den Text mit der Zahl aus
- warte 1 Sekunde
- nächste Runde, bis durchgezählt ist
countdown_classic.cmd
@echo off
chcp 65001 >nul & rem Umlaute anzeigen
setlocal enableDelayedExpansion
rem Erzeuge Zeile aus backspace Characters... %BS% ist ein Rückschritt
rem erzeuge Backspace
for /f %%. in ('"echo prompt $H|cmd"') do set "BS=%%."
rem Kette von 127 Backspaces (die Länge spielt keine rolle, es geht nie weiter zurück als der Zeilenanfang und kaum eine zu löschende Zeile dürfte 127 Zeichen übersschreiten)
for /l %%. in (1,1,7) do (call set "bk_ln=%%bk_ln%%%%bk_ln%%%BS%")
:: Ende Vorbereitung
set "__timeout=500"
for /l %%a in (%__timeout%,-1,1) do (
rem schreibe 127 Backspaces (%bk_ln%) und anschließend den gewünschten String
rem löscht eine bestehende Zeile rückwärts (wie die Backspacetaste)
<nul set /p "=%bk_ln%Der Timer läuft noch %%a Sekunden"||ver>nul
rem 1Sekunde warten
timeout 1 >nul
)
rem neue Zeile
echo:
echo jetzt geht's normal weiter
pause
...diese Variante läuft auf jedem Windows (abgesehen von den Umlauten...) .
Mit Windows 10 ab 1903 wurden neue Consolenfunktionen standardmäßig aktiviert.
Mit ANSI Terminalsequenzen (EscapeSequenzen) kann man die Textausgaben steuern.
@echo off
chcp 65001 >nul & rem Umlaute anzeigen
rem teste ob unter Win 10 (ab 1903) die neuen Consolfunktionen eingeschalten sind...
for /f "tokens=3 delims=." %%a in ('ver') do (
if %%a geq 18362 (reg query "HKCU\Console" /v "ForceV2"|find "REG_DWORD 0x0">nul && (
echo Neue Consolenfunktionen sind ausgeschaltet!) || goto :init
) else ( echo Benötige Windows 10 ab Version 1903)
)
timeout 3 >nul
exit /b
:init
rem erzeuge Escape-Char
for /f %%. in ('"echo prompt $E|cmd"') do set "ESC=%%."
set "saveCursorPos=%ESC%7"
set "loadCursorPos=%ESC%8"
set "CursOff=%ESC%[?25l"
set "CursOn=%ESC%[?25h"
:: Ende Vorbereitung
echo ein beliebiger text...
echo:
set "__timeout=20"
rem Aktuelle Cursorposition sichern und Cursor ausschalten
echo %saveCursorPos%%CursOff%
for /l %%a in (%__timeout%,-1,1) do (
rem setze den Cursor an die zuletzt gesicherte Position, schreibe den Text
rem hänge an den Text mindestens so viele LeerZeichen, wie die größte Länge der Zahl.
echo %loadCursorPos%Der Timer läuft noch %%a Sekunden...
echo es sind sogar
echo mehrzeilige veänderliche Ausgaben möglich.
echo sogar %ESC%[38;5;114m%%a %ESC%[38;5;134mMissisippi %ESC%[38;5;52mi%ESC%[38;5;88mn %ESC%[38;5;160mF%ESC%[38;5;202ma%ESC%[38;5;214mr%ESC%[38;5;226mb%ESC%[38;5;119me%ESC%[0m
timeout 1 >nul
)
echo.
echo jetzt geht's normal weiter
pause
Glossar:
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Computer, Windows, Batch
?...
na einfach timeout aufrufen...
timeout 300
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Wie man Timeout macht weiß ich. Ich will aber das ausgegeben wird wie lang der Timer noch geht. Wie es oben steht...