如果没有按下任何键,我该如何在 10 分钟后启动一个程序?

如果没有按下任何键,我该如何在 10 分钟后启动一个程序?

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

  • 我希望仅当没有按下任何键时程序才会在十分钟后启动。

  • 我希望如果在十分钟内按下任何键,程序就不会启动。

我应该在 .bat 文件中使用哪些命令?

答案1

我希望仅当没有按下任何键时程序才会在十分钟后启动。

使用以下批处理文件:

@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 答案Windows 批处理脚本:捕捉用户对“超时”命令的反应经过MC ND


进一步阅读

  • Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
  • 错误级别- 几乎所有应用程序和实用程序在完成/终止时都会设置退出代码。
  • 任务列表- TaskList 显示所有正在运行的应用程序和服务及其进程 ID (PID)。这可以在本地或远程计算机上运行。
  • 暂停- 延迟执行几秒钟或几分钟,以便在批处理文件中使用。

答案2

如果您不需要视觉倒计时,那么有一个简单的解决方案,使用 TIMEOUT,它使用<backspace>(0x08) 字符来定位每秒显示的倒计时数字。

看起来数字位于字符串的中间,但输出实际上将最后的 0 作为最后一个字符输出,前面有一个退格键或空格。如果用户按下某个键,则 TIMEOUT 被中止,并且永远不会输出最后的 0。

您可以将输出通过管道传输到 FINDSTR 来测试 0 是否是最后一个数字输出。

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

如果您获得了 tee 的 Windows 端口,那么您可以获得半功能的视觉倒计时,只是数字错误地出现在消息的末尾而不是中间。

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

相关内容