Como inicio um programa após 10 minutos, a menos que uma tecla seja pressionada?

3

start "" "C:\Program Files\program.exe"

  • Eu quero que o programa comece depois de dez minutos apenas se nenhuma tecla for pressionada.

  • Eu quero que o programa não inicie se qualquer tecla for pressionada dentro dos dez minutos.

Quais comandos devo usar em um arquivo .bat?

    
por Matthew Wai 30.10.2015 / 06:37

2 respostas

5

Eu quero que o programa inicie depois de dez minutos somente se nenhuma tecla for pressionada.

Use o seguinte arquivo em lotes:

@echo off

    call :controlTimeout 600
    if errorlevel 1 (
        echo A key was pressed
    ) else (
        echo Time Up
        start "" "C:\Program Files\program.exe"
    )

    exit /b 

:controlTimeout 
    setlocal
    start "" /belownormal /b cmd /q /d /c "timeout.exe %~1 /nobreak > nul"
    timeout.exe %~1 & tasklist | find "timeout" >nul 
    if errorlevel 1 ( set "exitCode=0" ) else ( 
        set "exitCode=1"
        taskkill /f /im timeout.exe 2>nul >nul
    )
    endlocal & exit /b %exitCode%

Crédito: o arquivo de lote acima é baseado na resposta do StackOverflow script em lote do Windows: captura a reação do usuário ao comando "timeout" por MC ND

Leitura Adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • Errorlevel - Quase todos os aplicativos e utilitários definem um código de saída quando concluem / terminam.
  • tasklist - TaskList exibe todos os aplicativos e serviços em execução com seu ID de processo (PID). Ele pode ser executado em um local ou em um computador remoto.
  • tempo limite - Atrase a execução por alguns segundos ou minutos, para uso em um arquivo de lote.
por 30.10.2015 / 12:56
2

Se você não precisa de uma contagem regressiva visual, existe uma solução simples usando TIMEOUT, que usa o caractere <backspace> (0x08) para posicionar o número da contagem regressiva exibido a cada segundo.

Parece que o número está no meio da string, mas a saída realmente tem o 0 final como o último caractere output, com um backspace ou espaço anterior. Se o usuário pressionar uma tecla, o TIMEOUT será abortado e o 0 final nunca será emitido.

Você pode canalizar a saída para FINDSTR para testar se 0 foi a saída do último número.

timeout 600 | findstr "[^0-9]0$" >nul && start "" "C:\Program Files\program.exe"

Se você tiver uma porta do Windows, então você pode obter uma contagem regressiva visual semi-funcional, exceto que os números aparecem erroneamente no final da mensagem ao invés do meio.

timeout 600 | tee countdown.txt
findstr "[^0-9]0$" countdown.txt >nul && start "" "C:\Program Files\program.exe"
del countdown.txt
    
por 31.10.2015 / 21:01