cmd-Frage: timeout Rückgabewert?

Adolar

Lt. Junior Grade
Registriert
Sep. 2014
Beiträge
346
Hallo alle, kann man dem "timeout" die Info entlocken, ob es abgelaufen ist oder per Tastendruck abgekürzt wurde? Der errorlevel scheint immer 0 zu sein, damit geht's also eher nicht.

Grüße, Adolar
 
Man könnte die Zeiten vor dem Aufruf des Hilfsprogramms TIMEOUT und nach Beendigung desselben ermitteln.
Unten ein Beispiel, wie Datum und Uhrzeit ausgelesen und ausgegeben werden können:

ECHO OFF
Code:
ECHO OFF
CLS
TITLE Datum und Uhrzeit auslesen
ECHO.
ECHO Jahr    : %DATE:~0,4%
ECHO Monat   : %DATE:~5,2%
ECHO Tag     : %DATE:~8,2%
ECHO Stunden : %TIME:~-11,2%
ECHO Minuten : %TIME:~-8,2%
ECHO Sekunden: %TIME:~-5,2%
ECHO.
SET Datum=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
ECHO Ausgelesenes Datum (YYYYMMDD) : %Datum%
SET Uhrzeit=%TIME:~-11,2%:%TIME:~-8,2%:%TIME:~-5,2%
ECHO Ausgelesene Uhrzeit (HH:nn:ss): %Uhrzeit%
TIMEOUT /T 5

Viel Erfolg
 
  • Gefällt mir
Reaktionen: tollertyp
Hätte dann zwar eine "Unschärfe", aber wir wissen ja nicht, wie wichtig es ist, es "exakt" zu wissen. Wenn ich z.B. 0,1s vor Ende drücke, weiß ich es als User ja selbst auch nicht.

Und wenn die Timeout-Dauer-z.B. unter 1 Minute ist z.B. reicht es auch, nur die Sekunden und Millisekunden zu betrachten.
 
tollertyp schrieb:
Evtl mit choice das Verhalten einigermaßen faken... aber glaube, dass es nicht ganz so schön ist
https://stackoverflow.com/questions/47519101/timeout-exe-alternative-for-legacy-windows-oses

Also vielleicht findet man irgendwo auch eine Alternative zu timeout, die das direkt kann. Ich habe aber noch keine gefunden.
Das liefert leider auch keinen unterschiedlichen Errorlevel zwischen abgelaufen und unterbrochen. Schade. Aber danke für den Tipp.
 
Also unabhängig davon, dass ich die Variante nicht elegant finde, aber sicher?
Weil grundsätzlich sollte es das schon, wenn man es "richtig" macht.
https://ss64.com/nt/choice.html

Also wenn du halt den Default-Wert drückst, dann hast du den identischen ERROR_LEVEL, ja. Aber sonst solltest du einen höheren ERROR_LEVEL haben.

Wie sah denn deine Abfrage aus?
 
ella_one schrieb:
Man könnte die Zeiten vor dem Aufruf des Hilfsprogramms TIMEOUT und nach Beendigung desselben ermitteln.
Unten ein Beispiel, wie Datum und Uhrzeit ausgelesen und ausgegeben werden können:

ECHO OFF
Code:
ECHO OFF
CLS
TITLE Datum und Uhrzeit auslesen
ECHO.
ECHO Jahr    : %DATE:~0,4%
ECHO Monat   : %DATE:~5,2%
ECHO Tag     : %DATE:~8,2%
ECHO Stunden : %TIME:~-11,2%
ECHO Minuten : %TIME:~-8,2%
ECHO Sekunden: %TIME:~-5,2%
ECHO.
SET Datum=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
ECHO Ausgelesenes Datum (YYYYMMDD) : %Datum%
SET Uhrzeit=%TIME:~-11,2%:%TIME:~-8,2%:%TIME:~-5,2%
ECHO Ausgelesene Uhrzeit (HH:nn:ss): %Uhrzeit%
TIMEOUT /T 5

Viel Erfolg
So ungefähr mache ich das jetzt, nur nicht so kompliziert. Das Kommano time /T liefert auch die aktuelle Uhrzeit. Aber um Herauszufinden, wie es zum Abschluss kam, muss ich Anfangs- und Endzeit vergleichen. Das ist mir dafür zu viel Aufwand. Hätte ja sein können, dass es einfacher geht.
Danke für eure Hilfe und die vielen Ideen!
Ergänzung ()

tollertyp schrieb:
Also unabhängig davon, dass ich die Variante nicht elegant finde, aber sicher?
Weil grundsätzlich sollte es das schon, wenn man es "richtig" macht.
https://ss64.com/nt/choice.html

Also wenn du halt den Default-Wert drückst, dann hast du den identischen ERROR_LEVEL, ja. Aber sonst solltest du einen höheren ERROR_LEVEL haben.

Wie sah denn deine Abfrage aus?
Im Anwendungsfall soll unterschieden werden, ob irgendeine beliebige Taste zum Abbruch gedückt wurde, oder ob der timer abgelaufen ist. Dies ist so nicht sicher möglich.
 
Zuletzt bearbeitet:
Ich meinte wie du den ERRORLEVEL konkret geprüft hast.
Weil choice sollte durchaus verschiedene ERRORLEVEL liefern, wenn du nicht zufällig immer den Standard-Wert gedrückt hast.

1645225414017.png


Im ersten Fall habe ich eine Taste geedrückt, die 1. Im zweiten Fall habe ich die Taste 0 gedrückt. Drücke ich keine Taste, ist das Verhalten (sowohl optisch als auch vom Errorlevel her) identisch.

1, weil 0 als Standardwert das erste Zeichen in der Liste der Zeichen ist.

Code:
@echo off
echo Bitte Taste druecken
choice /C 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ /D 0 /T 10 > nul
if %ERRORLEVEL% neq 1 echo Taste gedrueckt
if %ERRORLEVEL% equ 1 echo Zeit abgelaufen

Statt 0 als Default (/D 0) kannst du auch mit anderen Werten rumspielen:
1645225666240.png

Aber da musst du aufpassen, dass die Dateicodierung dann zur Kommandozeile passt.

Z.B.:
Code:
choice /C þ0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ /D þ /T 10 > nul
 
Verstehe. Aber es gibt noch immer den Fall, dass zufällig die Default-Taste gedrückt wurde, und dann sieht es wieder aus wie abgelaufen.
Übrigens funktioniert bei Windows 10 das "-" nicht als gültiges Zeichen in der choice-Kette.
Schade. timeout wäre schon das richtige Kommando. Aber was nicht ist, ist nicht. Nicht schlimm! Ich baue mir was, wenn ich mal Lust habe.
 
Du hast genau dann meinen Kommentar geöffnet, als ich ganz kurz einen ungültigen Zustand hatte. Auf das Thema bin ich bereits in einem Edit eingegangen ;-)
 
  • Gefällt mir
Reaktionen: Adolar
Genau, wir sind zu schnell. Aber das mit dem Sonderzeichen ist eine gute Idee. Das macht die Lösung doch wieder interssant. Ich denke, damit geht's. Das ist meine Lösung.
Danke dir!
 
  • Gefällt mir
Reaktionen: tollertyp
Also sie ist sicher nicht perfekt, aber denke ganz akzeptabel. Manchmal muss man halt pragramtisch sein.
 
Zurück
Oben