3

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

  • Я хочу, чтобы программа запускалась через десять минут, только если не нажата ни одна клавиша.

  • Я хочу, чтобы программа не запускалась при нажатии любой клавиши в течение десяти минут.

Какие команды я должен использовать в файле .bat?

2 ответа2

5

Я хочу, чтобы программа запускалась через десять минут, только если не нажата ни одна клавиша.

Используйте следующий пакетный файл:

@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%

Кредит: вышеупомянутый пакетный файл основан на пакетном сценарии окон ответов StackOverflow : поймать реакцию пользователя на команду "timeout" от MC ND


Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • Уровень ошибки - почти все приложения и утилиты устанавливают код завершения при завершении / завершении.
  • TaskList - TaskList отображает все запущенные приложения и службы с их идентификатором процесса (PID). Это можно запустить на локальном или удаленном компьютере.
  • timeout - задержка выполнения на несколько секунд или минут для использования в командном файле.
2

Если вам не нужен визуальный обратный отсчет, есть простое решение, использующее TIMEOUT, которое использует символ <backspace> backspace > (0x08) для позиционирования номера обратного отсчета, который отображается каждую секунду.

Похоже, что число находится в середине строки, но на самом деле конечный 0 имеет выходной результат в виде последнего символа, с предшествующим пробелом или пробелом. Если пользователь нажимает клавишу, TIMEOUT прерывается и окончательный 0 никогда не выводится.

Вы можете направить вывод в FINDSTR, чтобы проверить, был ли последний вывод числа 0.

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

Если у вас есть тройник в Windows, то вы можете получить полуфункциональный визуальный отсчет, за исключением того, что цифры ошибочно отображаются в конце сообщения вместо середины.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .