3 votes

Comment démarrer un programme au bout de 10 minutes si une touche n'est pas pressée ?

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

  • Je veux que le programme ne démarre au bout de dix minutes que si aucune touche n'est pressée.

  • Je veux que le programme ne démarre pas si une touche est pressée dans les dix minutes.

Quelles commandes dois-je utiliser dans un fichier .bat ?

6voto

DavidPostill Points 140654

Je veux que le programme ne démarre au bout de dix minutes que si aucune touche n'est pressée.

Utilisez le fichier batch suivant :

@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édit : Le fichier batch ci-dessus est basé sur la réponse de StackOverflow Windows batch scripting : attraper la réaction de l'utilisateur à la commande "timeout". por MC ND


Autres lectures

  • Un index A-Z de la ligne de commande CMD de Windows - Une excellente référence pour tout ce qui concerne la ligne cmd de Windows.
  • Niveau d'erreur - Presque toutes les applications et tous les utilitaires définissent un code de sortie lorsqu'ils se terminent.
  • Liste de tâches - TaskList affiche toutes les applications et tous les services en cours d'exécution avec leur identifiant de processus (PID). Il peut être exécuté sur un ordinateur local ou distant.
  • délai d'attente - Retarder l'exécution de quelques secondes ou minutes, pour une utilisation dans un fichier batch.

2voto

dbenham Points 10555

Si vous n'avez pas besoin d'un compte à rebours visuel, il existe une solution simple utilisant TIMEOUT, qui utilise la fonction <backspace> (0x08) pour positionner le numéro du compte à rebours qui s'affiche chaque seconde.

Il semble que le numéro se trouve au milieu de la chaîne, mais la sortie comporte en fait le 0 final comme dernier caractère sorti, précédé d'un espace ou d'un retour arrière. Si l'utilisateur appuie sur une touche, alors le TIMEOUT est interrompu et le 0 final n'est jamais sorti.

Vous pouvez passer la sortie à FINDSTR pour tester si 0 était le dernier nombre sorti.

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

Si vous disposez d'un portage Windows de tee, vous pouvez obtenir un compte à rebours visuel semi-fonctionnel, sauf que les chiffres apparaissent par erreur à la fin du message au lieu du milieu.

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X