Page 1 of 1

The timeout command blocks the W key from closing CMD window

Posted: 18 Nov 2023 11:26
by DOSadnie
As pointed out in this discussion viewtopic.php?f=3&t=10897&p=69149#p69008 apparently the timeout command makes it impossible to press any key to close CMD window, because the W is exempted from that rule. Here is basic example

Code: Select all

@echo off
echo Pressing of any key will close this window - except when you press W

timeout /t 10 | findstr /R ".0$" > nul
&& goto continue || exit

command > nul 2>&1
:continue
How could this be happening - and more importantly: how to fix / workaround this issue?

Re: The timeout command blocks the W key from closing CMD window

Posted: 18 Nov 2023 19:25
by ShadowThief
How could this be happening
It's obviously a bug in the code. Nobody here is capable of elaborating further because Windows is closed source.
more importantly: how to fix / workaround this issue?
By pressing one of the 100+ other keys on the keyboard. This is such a non-issue that I'm surprised you bothered to make a second topic about it after nobody thought it was interesting enough to post in your original topic. Feel free to reach out to Microsoft if this is genuinely impeding your workflow, but you are literally the only person I've ever seen complain about this, so don't expect it to get any meaningful priority.

Re: The timeout command blocks the W key from closing CMD window

Posted: 21 Nov 2023 17:19
by koko
Edit: sorry, overlooked the intent with the timeout tied to the key detection interrupt. Seems indeed any 'w' input from a command to the right of the timeout pipe is eaten, even if handled with something else like Powershell.

Prior post below, edited a little:

---

There's a Powershell way to detect all keypresses, even modifier keys, which I've used before in batch scripts to handle things like choices and/or exiting scripts (I assume you mean not when a process is running since that would be canceled via Ctrl+C).

Example using a CHOICE-like prompt where certain keys are given separate handling, while any other key will exit. To change it to make any key exit the call argument can be removed.

Code: Select all

@echo off
setlocal enableextensions enabledelayedexpansion

<nul set /p "=Press A/B/C to pause or any other key to exit..."

:: Remove call arguments to disable separate key handling
call :choice "a b c"
if !errorlevel! equ 0 (
    exit
    ) else (
    if !errorlevel! equ 1 echo "Pressed a"
    if !errorlevel! equ 2 echo "Pressed b"
    if !errorlevel! equ 3 echo "Pressed c"
    pause
    )

exit

:choice [choices]
    powershell -Command "$Key = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown').Character ; $Choices = '%1' ; $ErrorLevel = 0 ; foreach ( $_ in $Choices.split() ){ $i++ ; if ( $Key -eq $_ ){ $ErrorLevel = $i } } ; exit($ErrorLevel)"
    exit /b

endlocal

Re: The timeout command blocks the W key from closing CMD window

Posted: 09 Dec 2023 09:27
by DOSadnie
ShadowThief wrote:
18 Nov 2023 19:25
How could this be happening
It's obviously a bug in the code
[...]
Feel free to reach out to Microsoft
[...]
I am unable to do so because when trying to create Microsoft Account nothing happens after I enter the verification code from an e-mail I receive [i.e. there is no next step to be chosen / directed to, just a "Create account" text is shown which is not a link]; while logging in with my GitHub account is impossible due to it using e-mail address that is "a work or school account. You can't use this GitHub account to sign in."]

So once again Microsoft gets another trophy for stupidity