Can I create a 'set /p “”=' command with a timer in Cmd?

后端 未结 2 854
野的像风
野的像风 2020-12-06 23:24

I want to create a timer for the \'set /p \"\"=\' command so that if you don\'t input something in the required time space it moves to a different label.

Eg.

2条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-07 00:11

    I took the answer at this post and slightly modified it in order to fulfill this request.

    @echo off
    setlocal EnableDelayedExpansion
    
    rem Execute a SET /P command with time out
    rem Antonio Perez Ayala
    
    rem If this file is re-executed as pipe's right side, go to it
    if "%~1" equ "TimeoutMonitor" goto %1
    
    del InputLine.txt 2> NUL
    (
       set /P "input=You have 3 seconds to type 'go': " > CON
       > InputLine.txt call set /P "=%%input%%" < NUL
    ) 2> NUL | "%~F0" TimeoutMonitor 3
    set /P "input=" < InputLine.txt
    del InputLine.txt
    if /I "%input%" equ "go" (
       echo You did it^^!
    ) else (
       echo you failed...
    )
    goto :EOF
    
    
    :TimeoutMonitor
    
    rem Get the PID of pipe's left side
    tasklist /FI "IMAGENAME eq cmd.exe" /FO TABLE /NH > tasklist.txt
    for /F "tokens=2" %%a in (tasklist.txt) do (
       set "leftSidePipePID=!lastButOnePID!"
       set "lastButOnePID=%%a"
    )
    del tasklist.txt
    
    rem Wait for the input line, or until the number of seconds passed
    for /L %%i in (1,1,%2) do (
       ping -n 2 localhost > NUL
       if exist InputLine.txt exit /B
    )
    
    rem Timed out: kill the SET /P process and create a standard input line
    taskkill /PID %leftSidePipePID% /F > NUL
    echo/
    echo Timed Out> InputLine.txt
    
    exit /B
    

提交回复
热议问题