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