Batch timeout Zeit "anzeigen"?

2 Antworten

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

?...

na einfach timeout aufrufen...

timeout 300 
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Shadownic 
Beitragsersteller
 09.12.2020, 20:38

Wie man Timeout macht weiß ich. Ich will aber das ausgegeben wird wie lang der Timer noch geht. Wie es oben steht...

0